aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schwinge <tschwinge@baylibre.com>2024-03-22 09:49:13 +0100
committerThomas Schwinge <tschwinge@baylibre.com>2024-03-22 09:49:13 +0100
commit4c445f0015b9779d17d0ca7e8a6fc62cb5cf9e5a (patch)
tree712603f483cb781c846928c2aa769af75c247251
parent83c5b0292a9af1362f8b56bf495405d30a262131 (diff)
parent4ded42c2c5a5c977dbf67b71c5d78f8a6dca7cbb (diff)
downloadgcc-4c445f0015b9779d17d0ca7e8a6fc62cb5cf9e5a.zip
gcc-4c445f0015b9779d17d0ca7e8a6fc62cb5cf9e5a.tar.gz
gcc-4c445f0015b9779d17d0ca7e8a6fc62cb5cf9e5a.tar.bz2
Merge commit '00dea7e8c41b672730d6e2c891b6012a83d8842c^' into HEAD
-rw-r--r--contrib/ChangeLog5
-rw-r--r--gcc/ChangeLog42
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/Makefile.in34
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/lang.opt.urls30
-rw-r--r--gcc/analyzer/access-diagram.cc4
-rw-r--r--gcc/analyzer/analyzer.opt.urls215
-rw-r--r--gcc/analyzer/checker-event.cc83
-rw-r--r--gcc/analyzer/checker-event.h6
-rw-r--r--gcc/analyzer/inlining-iterator.h40
-rw-r--r--gcc/analyzer/sm-malloc.cc10
-rw-r--r--gcc/c-family/c.opt.urls1433
-rw-r--r--gcc/c/ChangeLog5
-rw-r--r--gcc/c/c-parser.cc4
-rw-r--r--gcc/common.opt.urls1862
-rw-r--r--gcc/config/aarch64/aarch64.opt.urls93
-rw-r--r--gcc/config/alpha/alpha.opt.urls76
-rw-r--r--gcc/config/alpha/elf.opt.urls2
-rw-r--r--gcc/config/arc/arc-tables.opt.urls2
-rw-r--r--gcc/config/arc/arc.opt.urls260
-rw-r--r--gcc/config/arm/arm-tables.opt.urls2
-rw-r--r--gcc/config/arm/arm.opt.urls149
-rw-r--r--gcc/config/arm/vxworks.opt.urls2
-rw-r--r--gcc/config/avr/avr.opt.urls71
-rw-r--r--gcc/config/bfin/bfin.opt.urls61
-rw-r--r--gcc/config/bpf/bpf.opt.urls35
-rw-r--r--gcc/config/c6x/c6x-tables.opt.urls2
-rw-r--r--gcc/config/c6x/c6x.opt.urls18
-rw-r--r--gcc/config/cris/cris.opt.urls65
-rw-r--r--gcc/config/cris/elf.opt.urls8
-rw-r--r--gcc/config/csky/csky.opt.urls104
-rw-r--r--gcc/config/csky/csky_tables.opt.urls2
-rw-r--r--gcc/config/darwin.opt.urls224
-rw-r--r--gcc/config/dragonfly.opt.urls9
-rw-r--r--gcc/config/epiphany/epiphany.opt.urls52
-rw-r--r--gcc/config/fr30/fr30.opt.urls8
-rw-r--r--gcc/config/freebsd.opt.urls9
-rw-r--r--gcc/config/frv/frv.opt.urls111
-rw-r--r--gcc/config/ft32/ft32.opt.urls20
-rw-r--r--gcc/config/fused-madd.opt.urls4
-rw-r--r--gcc/config/g.opt.urls5
-rw-r--r--gcc/config/gcn/gcn.opt.urls23
-rw-r--r--gcc/config/gnu-user.opt.urls9
-rw-r--r--gcc/config/h8300/h8300.opt.urls29
-rw-r--r--gcc/config/hpux11.opt.urls6
-rw-r--r--gcc/config/i386/cygming.opt.urls30
-rw-r--r--gcc/config/i386/cygwin.opt.urls6
-rw-r--r--gcc/config/i386/djgpp.opt.urls2
-rw-r--r--gcc/config/i386/i386.opt.urls611
-rw-r--r--gcc/config/i386/mingw-w64.opt.urls5
-rw-r--r--gcc/config/i386/mingw.opt.urls12
-rw-r--r--gcc/config/i386/nto.opt.urls5
-rw-r--r--gcc/config/ia64/ia64.opt.urls122
-rw-r--r--gcc/config/ia64/ilp32.opt.urls8
-rw-r--r--gcc/config/ia64/vms.opt.urls2
-rw-r--r--gcc/config/iq2000/iq2000.opt.urls14
-rw-r--r--gcc/config/linux-android.opt.urls11
-rw-r--r--gcc/config/linux.opt.urls14
-rw-r--r--gcc/config/lm32/lm32.opt.urls14
-rw-r--r--gcc/config/loongarch/loongarch.cc1296
-rw-r--r--gcc/config/loongarch/loongarch.opt.urls66
-rw-r--r--gcc/config/lynx.opt.urls5
-rw-r--r--gcc/config/m32c/m32c.opt.urls8
-rw-r--r--gcc/config/m32r/m32r.opt.urls27
-rw-r--r--gcc/config/m68k/ieee.opt.urls4
-rw-r--r--gcc/config/m68k/m68k-tables.opt.urls2
-rw-r--r--gcc/config/m68k/m68k.opt.urls107
-rw-r--r--gcc/config/m68k/uclinux.opt.urls2
-rw-r--r--gcc/config/mcore/mcore.opt.urls38
-rw-r--r--gcc/config/microblaze/microblaze.opt.urls59
-rw-r--r--gcc/config/mips/mips-tables.opt.urls2
-rw-r--r--gcc/config/mips/mips.cc33
-rw-r--r--gcc/config/mips/mips.md28
-rw-r--r--gcc/config/mips/mips.opt.urls269
-rw-r--r--gcc/config/mips/sde.opt.urls2
-rw-r--r--gcc/config/mmix/mmix.opt.urls44
-rw-r--r--gcc/config/mn10300/mn10300.opt.urls32
-rw-r--r--gcc/config/moxie/moxie.opt.urls14
-rw-r--r--gcc/config/msp430/msp430.opt.urls53
-rw-r--r--gcc/config/nds32/nds32-elf.opt.urls5
-rw-r--r--gcc/config/nds32/nds32-linux.opt.urls5
-rw-r--r--gcc/config/nds32/nds32.opt.urls57
-rw-r--r--gcc/config/netbsd-elf.opt.urls5
-rw-r--r--gcc/config/netbsd.opt.urls6
-rw-r--r--gcc/config/nios2/elf.opt.urls14
-rw-r--r--gcc/config/nios2/nios2.opt.urls50
-rw-r--r--gcc/config/nvptx/nvptx-gen.opt.urls2
-rw-r--r--gcc/config/nvptx/nvptx.cc6
-rw-r--r--gcc/config/nvptx/nvptx.opt.urls29
-rw-r--r--gcc/config/openbsd.opt.urls6
-rw-r--r--gcc/config/or1k/elf.opt.urls8
-rw-r--r--gcc/config/or1k/or1k.opt.urls46
-rw-r--r--gcc/config/pa/pa-hpux.opt.urls11
-rw-r--r--gcc/config/pa/pa-hpux1010.opt.urls2
-rw-r--r--gcc/config/pa/pa-hpux1111.opt.urls2
-rw-r--r--gcc/config/pa/pa-hpux1131.opt.urls2
-rw-r--r--gcc/config/pa/pa.opt.urls71
-rw-r--r--gcc/config/pa/pa64-hpux.opt.urls8
-rw-r--r--gcc/config/pdp11/pdp11.opt.urls41
-rw-r--r--gcc/config/pru/pru.opt.urls17
-rw-r--r--gcc/config/riscv/riscv-vector-costs.cc66
-rw-r--r--gcc/config/riscv/riscv-vsetvl.cc43
-rw-r--r--gcc/config/riscv/riscv.cc35
-rw-r--r--gcc/config/riscv/riscv.md11
-rw-r--r--gcc/config/riscv/riscv.opt.urls91
-rw-r--r--gcc/config/riscv/t-riscv2
-rw-r--r--gcc/config/riscv/vector.md10
-rw-r--r--gcc/config/rl78/rl78.opt.urls31
-rw-r--r--gcc/config/rpath.opt.urls2
-rw-r--r--gcc/config/rs6000/476.opt.urls2
-rw-r--r--gcc/config/rs6000/aix64.opt.urls23
-rw-r--r--gcc/config/rs6000/darwin.opt.urls14
-rw-r--r--gcc/config/rs6000/linux64.opt.urls4
-rw-r--r--gcc/config/rs6000/rs6000-tables.opt.urls2
-rw-r--r--gcc/config/rs6000/rs6000.opt.urls214
-rw-r--r--gcc/config/rs6000/sysv4.opt.urls87
-rw-r--r--gcc/config/rtems.opt.urls6
-rw-r--r--gcc/config/rx/elf.opt.urls14
-rw-r--r--gcc/config/rx/rx.opt.urls54
-rw-r--r--gcc/config/s390/s390.opt.urls92
-rw-r--r--gcc/config/s390/tpf.opt.urls8
-rw-r--r--gcc/config/sh/sh.opt.urls174
-rw-r--r--gcc/config/sh/superh.opt.urls4
-rw-r--r--gcc/config/sol2.opt.urls21
-rw-r--r--gcc/config/sparc/long-double-switch.opt.urls6
-rw-r--r--gcc/config/sparc/sparc.opt.urls108
-rw-r--r--gcc/config/stormy16/stormy16.opt.urls5
-rw-r--r--gcc/config/v850/v850.opt.urls60
-rw-r--r--gcc/config/vax/elf.opt.urls2
-rw-r--r--gcc/config/vax/vax.opt.urls10
-rw-r--r--gcc/config/visium/visium.opt.urls29
-rw-r--r--gcc/config/vms/vms.opt.urls8
-rw-r--r--gcc/config/vxworks-smp.opt.urls5
-rw-r--r--gcc/config/vxworks.opt.urls20
-rw-r--r--gcc/config/xtensa/elf.opt.urls5
-rw-r--r--gcc/config/xtensa/uclinux.opt.urls2
-rw-r--r--gcc/config/xtensa/xtensa.opt.urls37
-rw-r--r--gcc/cp/ChangeLog11
-rw-r--r--gcc/cp/call.cc22
-rw-r--r--gcc/cp/parser.cc4
-rw-r--r--gcc/d/ChangeLog4
-rw-r--r--gcc/d/lang.opt.urls223
-rw-r--r--gcc/diagnostic-format-sarif.cc13
-rw-r--r--gcc/diagnostic-format-sarif.h5
-rw-r--r--gcc/diagnostic-path.h9
-rw-r--r--gcc/diagnostic.h6
-rw-r--r--gcc/doc/options.texi26
-rw-r--r--gcc/doc/sourcebuild.texi9
-rw-r--r--gcc/expr.cc23
-rw-r--r--gcc/fortran/ChangeLog14
-rw-r--r--gcc/fortran/lang.opt.urls167
-rw-r--r--gcc/fortran/trans-types.cc12
-rw-r--r--gcc/gcc-urlifier.cc106
-rw-r--r--gcc/gcc-urlifier.def2
-rw-r--r--gcc/gcc-urlifier.h2
-rw-r--r--gcc/gcc.cc2
-rw-r--r--gcc/go/ChangeLog4
-rw-r--r--gcc/go/lang.opt.urls17
-rw-r--r--gcc/lto/lang.opt.urls8
-rw-r--r--gcc/m2/lang.opt.urls118
-rw-r--r--gcc/omp-general.cc21
-rw-r--r--gcc/opt-functions.awk15
-rw-r--r--gcc/options-urls-cc-gen.awk105
-rw-r--r--gcc/opts-diagnostic.h3
-rw-r--r--gcc/opts.cc95
-rw-r--r--gcc/opts.h8
-rw-r--r--gcc/params.opt.urls2
-rwxr-xr-xgcc/regenerate-opt-urls.py397
-rw-r--r--gcc/rust/lang.opt.urls29
-rw-r--r--gcc/testsuite/ChangeLog15
-rw-r--r--gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr112790.c27
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-conv4.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-conv5.C23
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/mipscop-1.c1
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/mipscop-2.c1
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/mipscop-3.c1
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/mipscop-4.c1
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-pr113222.c26
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c16
-rw-r--r--gcc/testsuite/gcc.dg/vect/slp-26.c8
-rw-r--r--gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvstelm.c2
-rw-r--r--gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c2
-rw-r--r--gcc/testsuite/gcc.target/mips/pr104914.c25
-rw-r--r--gcc/testsuite/gcc.target/riscv/_Float16-nanboxing.c36
-rw-r--r--gcc/testsuite/gcc.target/riscv/interrupt-misaligned.c29
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c29
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-2.c29
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113209.c34
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-23.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-1.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-2.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-3.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c5
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-1.c14
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-2.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-3.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-4.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-5.c4
-rw-r--r--gcc/testsuite/lib/gcc-dg.exp6
-rw-r--r--gcc/toplev.cc5
-rw-r--r--gcc/tree-core.h6
-rw-r--r--gcc/tree.cc4
-rw-r--r--libgomp/ChangeLog4
-rw-r--r--libitm/ChangeLog4
-rw-r--r--libquadmath/ChangeLog4
-rw-r--r--libstdc++-v3/ChangeLog7
207 files changed, 10490 insertions, 1320 deletions
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index e3b7a4d..02de42f 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,8 @@
+2024-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ * update-copyright.py (GenericFilter): Skip gpl_v3_without_node.texi.
+ (GCCFilter): Skip GmcOptions.cc.
+
2023-12-21 Alexandre Oliva <oliva@adacore.com>
* compare_tests: Add tool to test lines. Match tabs besides
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a935ce0..4b0e6c6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,45 @@
+2024-01-03 Kwok Cheung Yeung <kcy@codesourcery.com>
+
+ * tree-core.h (enum omp_clause_code): Move OMP_CLAUSE_INDIRECT to before
+ OMP_CLAUSE__SIMDUID_.
+ * tree.cc (omp_clause_num_ops): Update position of entry for
+ OMP_CLAUSE_INDIRECT to correspond with omp_clause_code.
+ (omp_clause_code_name): Likewise.
+
+2024-01-03 Kwok Cheung Yeung <kcy@codesourcery.com>
+
+ * config/nvptx/nvptx.cc (nvptx_record_offload_symbol): Restucture
+ printing of FUNC_MAP/IND_FUNC_MAP labels.
+
+2024-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.cc (process_command): Update copyright notice dates.
+ * gcov-dump.cc (print_version): Ditto.
+ * gcov.cc (print_version): Ditto.
+ * gcov-tool.cc (print_version): Ditto.
+ * gengtype.cc (create_file): Ditto.
+ * doc/cpp.texi: Bump @copying's copyright year.
+ * doc/cppinternals.texi: Ditto.
+ * doc/gcc.texi: Ditto.
+ * doc/gccint.texi: Ditto.
+ * doc/gcov.texi: Ditto.
+ * doc/install.texi: Ditto.
+ * doc/invoke.texi: Ditto.
+
+2024-01-03 Xi Ruoyao <xry111@xry111.site>
+
+ * config/loongarch/simd.md (fmax<mode>3): New define_insn.
+ (fmin<mode>3): Likewise.
+ (reduc_fmax_scal_<mode>3): New define_expand.
+ (reduc_fmin_scal_<mode>3): Likewise.
+
+2024-01-03 Juzhe-Zhong <juzhe.zhong@rivai.ai>
+
+ PR target/113112
+ * config/riscv/riscv-vector-costs.cc (compute_nregs_for_mode): Add rgroup info.
+ (max_number_of_live_regs): Ditto.
+ (has_unexpected_spills_p): Ditto.
+
2024-01-02 Jun Sha (Joshua) <cooper.joshua@linux.alibaba.com>
Jin Ma <jinma@linux.alibaba.com>
Xianmiao Qu <cooper.qu@linux.alibaba.com>
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 53df001..e5d3623 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20240103
+20240104
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 8a8bc73..deb12e1 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1273,6 +1273,8 @@ FLAGS_TO_PASS = \
# All option source files
ALL_OPT_FILES=$(lang_opt_files) $(extra_opt_files)
+ALL_OPT_URL_FILES=$(patsubst %, %.urls, $(ALL_OPT_FILES))
+
# Target specific, C specific object file
C_TARGET_OBJS=@c_target_objs@
@@ -1289,7 +1291,7 @@ FORTRAN_TARGET_OBJS=@fortran_target_objs@
RUST_TARGET_OBJS=@rust_target_objs@
# Object files for gcc many-languages driver.
-GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o
+GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o options-urls.o
c-family-warn = $(STRICT_WARN)
@@ -1612,6 +1614,7 @@ OBJS = \
optinfo.o \
optinfo-emit-json.o \
options-save.o \
+ options-urls.o \
opts-global.o \
ordered-hash-map-tests.o \
passes.o \
@@ -1838,7 +1841,8 @@ OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \
# compiler and containing target-dependent code.
OBJS-libcommon-target = $(common_out_object_file) prefix.o \
opts.o opts-common.o options.o vec.o hooks.o common/common-targhooks.o \
- hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o
+ hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o \
+ options-urls.o
# This lists all host objects for the front ends.
ALL_HOST_FRONTEND_OBJS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS))
@@ -2441,9 +2445,9 @@ s-specs : Makefile
$(STAMP) s-specs
optionlist: s-options ; @true
-s-options: $(ALL_OPT_FILES) Makefile $(srcdir)/opt-gather.awk
+s-options: $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) Makefile $(srcdir)/opt-gather.awk
LC_ALL=C ; export LC_ALL ; \
- $(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) > tmp-optionlist
+ $(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) > tmp-optionlist
$(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist
$(STAMP) s-options
@@ -2459,6 +2463,12 @@ options-save.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
-f $(srcdir)/optc-save-gen.awk \
-v header_name="config.h system.h coretypes.h tm.h" < $< > $@
+options-urls.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
+ $(srcdir)/options-urls-cc-gen.awk
+ $(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \
+ -f $(srcdir)/options-urls-cc-gen.awk \
+ -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
+
options.h: s-options-h ; @true
s-options-h: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
$(srcdir)/opth-gen.awk
@@ -3612,6 +3622,22 @@ $(build_htmldir)/gccinstall/index.html: $(TEXI_GCCINSTALL_FILES)
DESTDIR=$(@D) \
$(SHELL) $(srcdir)/doc/install.texi2html
+# Regenerate the .opt.urls files from the generated html, and from the .opt
+# files. Doing so requires all languages that have their own HTML manuals
+# to be enabled.
+.PHONY: regenerate-opt-urls
+OPT_URLS_HTML_DEPS = $(build_htmldir)/gcc/Option-Index.html \
+ $(build_htmldir)/gdc/Option-Index.html \
+ $(build_htmldir)/gfortran/Option-Index.html
+
+regenerate-opt-urls: $(srcdir)/regenerate-opt-urls.py $(OPT_URLS_HTML_DEPS)
+ $(srcdir)/regenerate-opt-urls.py $(build_htmldir) $(shell dirname $(srcdir))
+
+# Run the unit tests for regenerate-opt-urls.py
+.PHONY: regenerate-opt-urls-unit-test
+regenerate-opt-urls-unit-test: $(OPT_URLS_HTML_DEPS)
+ $(srcdir)/regenerate-opt-urls.py $(build_htmldir) $(shell dirname $(srcdir)) --unit-test
+
MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 \
doc/fsf-funding.7 doc/gcov-tool.1 doc/gcov-dump.1 \
$(if $(filter yes,@enable_lto@),doc/lto-dump.1)
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index dc0c0df..0446fa0 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2024-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ * gnat_ugn.texi: Bump @copying's copyright year.
+ * gnat_rm.texi: Likewise.
+
Copyright (C) 2024 Free Software Foundation, Inc.
diff --git a/gcc/ada/gcc-interface/lang.opt.urls b/gcc/ada/gcc-interface/lang.opt.urls
new file mode 100644
index 0000000..7913bcb
--- /dev/null
+++ b/gcc/ada/gcc-interface/lang.opt.urls
@@ -0,0 +1,30 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/ada/gcc-interface/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+; duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+; duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc) LangUrlSuffix_D(gdc/Directory-Options.html#index-nostdinc)
+
+nostdlib
+UrlSuffix(gcc/Link-Options.html#index-nostdlib)
+
+; skipping UrlSuffix for 'fshort-enums' due to multiple URLs:
+; duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+; duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+; duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+; skipping UrlSuffix for 'fsigned-char' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-fsigned-char'
+; duplicate: 'gcc/Characters-implementation.html#index-fsigned-char-1'
+
+; skipping UrlSuffix for 'funsigned-char' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-funsigned-char'
+; duplicate: 'gcc/Characters-implementation.html#index-funsigned-char-1'
+
diff --git a/gcc/analyzer/access-diagram.cc b/gcc/analyzer/access-diagram.cc
index 25e6c92..9555ee8 100644
--- a/gcc/analyzer/access-diagram.cc
+++ b/gcc/analyzer/access-diagram.cc
@@ -1334,7 +1334,7 @@ public:
logger->log ("showing first and final element in array type");
region_model_manager *mgr = m_op.m_model.get_manager ();
tree domain = TYPE_DOMAIN (base_type);
- if (TYPE_MIN_VALUE (domain) && TYPE_MAX_VALUE (domain))
+ if (domain && TYPE_MIN_VALUE (domain) && TYPE_MAX_VALUE (domain))
{
const svalue *min_idx_sval
= mgr->get_or_create_constant_svalue (TYPE_MIN_VALUE (domain));
@@ -1364,7 +1364,7 @@ public:
gcc_assert (m_boundaries != nullptr);
tree domain = TYPE_DOMAIN (base_type);
- if (!(TYPE_MIN_VALUE (domain) && TYPE_MAX_VALUE (domain)))
+ if (!(domain && TYPE_MIN_VALUE (domain) && TYPE_MAX_VALUE (domain)))
return;
const int table_y = 0;
diff --git a/gcc/analyzer/analyzer.opt.urls b/gcc/analyzer/analyzer.opt.urls
new file mode 100644
index 0000000..5fcab72
--- /dev/null
+++ b/gcc/analyzer/analyzer.opt.urls
@@ -0,0 +1,215 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/analyzer/analyzer.opt and generated HTML
+
+Wanalyzer-allocation-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size)
+
+Wanalyzer-deref-before-check
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check)
+
+Wanalyzer-double-fclose
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-fclose)
+
+Wanalyzer-double-free
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-free)
+
+Wanalyzer-exposure-through-output-file
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-output-file)
+
+Wanalyzer-exposure-through-uninit-copy
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-uninit-copy)
+
+Wanalyzer-fd-access-mode-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-access-mode-mismatch)
+
+Wanalyzer-fd-double-close
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-double-close)
+
+Wanalyzer-fd-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak)
+
+Wanalyzer-fd-phase-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-phase-mismatch)
+
+Wanalyzer-fd-type-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-type-mismatch)
+
+Wanalyzer-fd-use-after-close
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-after-close)
+
+Wanalyzer-fd-use-without-check
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-without-check)
+
+Wanalyzer-file-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-file-leak)
+
+Wanalyzer-free-of-non-heap
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-free-of-non-heap)
+
+Wanalyzer-imprecise-fp-arithmetic
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-imprecise-fp-arithmetic)
+
+Wanalyzer-infinite-loop
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-loop)
+
+Wanalyzer-infinite-recursion
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-recursion)
+
+Wanalyzer-jump-through-null
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-jump-through-null)
+
+Wanalyzer-malloc-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-malloc-leak)
+
+Wanalyzer-mismatching-deallocation
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation)
+
+Wanalyzer-out-of-bounds
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds)
+
+Wanalyzer-overlapping-buffers
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-overlapping-buffers)
+
+Wanalyzer-possible-null-argument
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-possible-null-argument)
+
+Wanalyzer-possible-null-dereference
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-possible-null-dereference)
+
+Wanalyzer-unsafe-call-within-signal-handler
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-unsafe-call-within-signal-handler)
+
+Wanalyzer-null-argument
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-null-argument)
+
+Wanalyzer-null-dereference
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-null-dereference)
+
+Wanalyzer-putenv-of-auto-var
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-putenv-of-auto-var)
+
+Wanalyzer-shift-count-negative
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative)
+
+Wanalyzer-shift-count-overflow
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow)
+
+Wanalyzer-stale-setjmp-buffer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-stale-setjmp-buffer)
+
+Wanalyzer-tainted-allocation-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size)
+
+Wanalyzer-tainted-array-index
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index)
+
+Wanalyzer-tainted-assertion
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion)
+
+Wanalyzer-tainted-divisor
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor)
+
+Wanalyzer-tainted-offset
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset)
+
+Wanalyzer-tainted-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size)
+
+Wanalyzer-undefined-behavior-strtok
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-undefined-behavior-strtok)
+
+Wanalyzer-use-after-free
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-after-free)
+
+Wanalyzer-use-of-pointer-in-stale-stack-frame
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-pointer-in-stale-stack-frame)
+
+Wanalyzer-va-arg-type-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-arg-type-mismatch)
+
+Wanalyzer-va-list-exhausted
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-exhausted)
+
+Wanalyzer-va-list-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-leak)
+
+Wanalyzer-va-list-use-after-va-end
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-use-after-va-end)
+
+Wanalyzer-write-to-const
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const)
+
+Wanalyzer-write-to-string-literal
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal)
+
+Wanalyzer-use-of-uninitialized-value
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value)
+
+Wanalyzer-symbol-too-complex
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-symbol-too-complex)
+
+Wanalyzer-too-complex
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-too-complex)
+
+fanalyzer-checker=
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-checker)
+
+fanalyzer-debug-text-art
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-debug-text-art)
+
+fanalyzer-fine-grained
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-fine-grained)
+
+fanalyzer-feasibility
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-feasibility)
+
+fanalyzer-show-duplicate-count
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-show-duplicate-count)
+
+fanalyzer-state-purge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-state-purge)
+
+fanalyzer-state-merge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-state-merge)
+
+fanalyzer-suppress-followups
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-suppress-followups)
+
+fanalyzer-transitivity
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-transitivity)
+
+fanalyzer-show-events-in-system-headers
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-show-events-in-system-headers)
+
+fanalyzer-call-summaries
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-call-summaries)
+
+fanalyzer-undo-inlining
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-undo-inlining)
+
+fdump-analyzer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer)
+
+fdump-analyzer-stderr
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-stderr)
+
+fdump-analyzer-callgraph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-callgraph)
+
+fdump-analyzer-exploded-graph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-graph)
+
+fdump-analyzer-exploded-paths
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-paths)
+
+fdump-analyzer-json
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json)
+
+fdump-analyzer-state-purge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-state-purge)
+
+fdump-analyzer-supergraph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-supergraph)
+
+fdump-analyzer-untracked
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-untracked)
+
diff --git a/gcc/analyzer/checker-event.cc b/gcc/analyzer/checker-event.cc
index c9c07b3c..3ff3aea 100644
--- a/gcc/analyzer/checker-event.cc
+++ b/gcc/analyzer/checker-event.cc
@@ -55,6 +55,8 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/constraint-manager.h"
#include "analyzer/checker-event.h"
#include "analyzer/exploded-graph.h"
+#include "diagnostic-format-sarif.h"
+#include "tree-logical-location.h"
#if ENABLE_ANALYZER
@@ -106,46 +108,6 @@ event_kind_to_string (enum event_kind ek)
}
}
-/* A class for fixing up fndecls and stack depths in checker_event, based
- on inlining records.
-
- The early inliner runs before the analyzer, which can lead to confusing
- output.
-
- Tne base fndecl and depth within a checker_event are from call strings
- in program_points, which reflect the call strings after inlining.
- This class lets us offset the depth and fix up the reported fndecl and
- stack depth to better reflect the user's original code. */
-
-class inlining_info
-{
-public:
- inlining_info (location_t loc)
- {
- inlining_iterator iter (loc);
- m_inner_fndecl = iter.get_fndecl ();
- int num_frames = 0;
- while (!iter.done_p ())
- {
- m_outer_fndecl = iter.get_fndecl ();
- num_frames++;
- iter.next ();
- }
- if (num_frames > 1)
- m_extra_frames = num_frames - 1;
- else
- m_extra_frames = 0;
- }
-
- tree get_inner_fndecl () const { return m_inner_fndecl; }
- int get_extra_frames () const { return m_extra_frames; }
-
-private:
- tree m_outer_fndecl;
- tree m_inner_fndecl;
- int m_extra_frames;
-};
-
/* class checker_event : public diagnostic_event. */
/* checker_event's ctor. */
@@ -182,6 +144,30 @@ checker_event::get_meaning () const
return meaning ();
}
+/* Implementation of diagnostic_event::maybe_add_sarif_properties
+ for checker_event. */
+
+void
+checker_event::
+maybe_add_sarif_properties (sarif_object &thread_flow_loc_obj) const
+{
+ sarif_property_bag &props = thread_flow_loc_obj.get_or_create_properties ();
+#define PROPERTY_PREFIX "gcc/analyzer/checker_event/"
+ props.set (PROPERTY_PREFIX "emission_id",
+ diagnostic_event_id_to_json (m_emission_id));
+ props.set_string (PROPERTY_PREFIX "kind", event_kind_to_string (m_kind));
+
+ if (m_original_fndecl != m_effective_fndecl)
+ {
+ tree_logical_location logical_loc (m_original_fndecl);
+ props.set (PROPERTY_PREFIX "original_fndecl",
+ make_sarif_logical_location_object (logical_loc));
+ }
+ if (m_original_depth != m_effective_depth)
+ props.set_integer (PROPERTY_PREFIX "original_depth", m_original_depth);
+#undef PROPERTY_PREFIX
+}
+
/* Dump this event to PP (for debugging/logging purposes). */
void
@@ -538,6 +524,21 @@ state_change_event::get_meaning () const
/* class superedge_event : public checker_event. */
+/* Implementation of diagnostic_event::maybe_add_sarif_properties
+ for superedge_event. */
+
+void
+superedge_event::maybe_add_sarif_properties (sarif_object &thread_flow_loc_obj)
+ const
+{
+ checker_event::maybe_add_sarif_properties (thread_flow_loc_obj);
+ sarif_property_bag &props = thread_flow_loc_obj.get_or_create_properties ();
+#define PROPERTY_PREFIX "gcc/analyzer/superedge_event/"
+ if (m_sedge)
+ props.set (PROPERTY_PREFIX "superedge", m_sedge->to_json ());
+#undef PROPERTY_PREFIX
+}
+
/* Get the callgraph_superedge for this superedge_event, which must be
for an interprocedural edge, rather than a CFG edge. */
@@ -588,6 +589,8 @@ superedge_event::superedge_event (enum event_kind kind,
m_eedge (eedge), m_sedge (eedge.m_sedge),
m_var (NULL_TREE), m_critical_state (0)
{
+ /* Note that m_sedge can be nullptr for e.g. jumps through
+ function pointers. */
}
/* class cfg_edge_event : public superedge_event. */
diff --git a/gcc/analyzer/checker-event.h b/gcc/analyzer/checker-event.h
index 01300ef..7d8915c 100644
--- a/gcc/analyzer/checker-event.h
+++ b/gcc/analyzer/checker-event.h
@@ -118,6 +118,9 @@ public:
return 0;
}
+ void
+ maybe_add_sarif_properties (sarif_object &thread_flow_loc_obj) const override;
+
/* Additional functionality. */
int get_original_stack_depth () const { return m_original_depth; }
@@ -391,6 +394,9 @@ public:
class superedge_event : public checker_event
{
public:
+ void maybe_add_sarif_properties (sarif_object &thread_flow_loc_obj)
+ const override;
+
/* Mark this edge event as being either an interprocedural call or
return in which VAR is in STATE, and that this is critical to the
diagnostic (so that get_desc can attempt to get a better description
diff --git a/gcc/analyzer/inlining-iterator.h b/gcc/analyzer/inlining-iterator.h
index d6314d0..e65caa4 100644
--- a/gcc/analyzer/inlining-iterator.h
+++ b/gcc/analyzer/inlining-iterator.h
@@ -106,4 +106,44 @@ private:
tree m_next_abstract_origin;
};
+/* A class for fixing up fndecls and stack depths in checker_event, based
+ on inlining records.
+
+ The early inliner runs before the analyzer, which can lead to confusing
+ output.
+
+ Tne base fndecl and depth within a checker_event are from call strings
+ in program_points, which reflect the call strings after inlining.
+ This class lets us offset the depth and fix up the reported fndecl and
+ stack depth to better reflect the user's original code. */
+
+class inlining_info
+{
+public:
+ inlining_info (location_t loc)
+ {
+ inlining_iterator iter (loc);
+ m_inner_fndecl = iter.get_fndecl ();
+ int num_frames = 0;
+ while (!iter.done_p ())
+ {
+ m_outer_fndecl = iter.get_fndecl ();
+ num_frames++;
+ iter.next ();
+ }
+ if (num_frames > 1)
+ m_extra_frames = num_frames - 1;
+ else
+ m_extra_frames = 0;
+ }
+
+ tree get_inner_fndecl () const { return m_inner_fndecl; }
+ int get_extra_frames () const { return m_extra_frames; }
+
+private:
+ tree m_outer_fndecl;
+ tree m_inner_fndecl;
+ int m_extra_frames;
+};
+
#endif /* GCC_ANALYZER_INLINING_ITERATOR_H */
diff --git a/gcc/analyzer/sm-malloc.cc b/gcc/analyzer/sm-malloc.cc
index 8da2e7c..2e0cf8a 100644
--- a/gcc/analyzer/sm-malloc.cc
+++ b/gcc/analyzer/sm-malloc.cc
@@ -46,6 +46,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/program-state.h"
#include "analyzer/checker-event.h"
#include "analyzer/exploded-graph.h"
+#include "analyzer/inlining-iterator.h"
#if ENABLE_ANALYZER
@@ -2168,6 +2169,15 @@ maybe_complain_about_deref_before_check (sm_context *sm_ctxt,
if (checked_in_frame->get_index () > assumed_nonnull_in_frame->get_index ())
return;
+ /* Don't complain if STMT was inlined from another function, to avoid
+ similar false positives involving shared helper functions. */
+ if (stmt->location)
+ {
+ inlining_info info (stmt->location);
+ if (info.get_extra_frames () > 0)
+ return;
+ }
+
tree diag_ptr = sm_ctxt->get_diagnostic_tree (ptr);
if (diag_ptr)
sm_ctxt->warn
diff --git a/gcc/c-family/c.opt.urls b/gcc/c-family/c.opt.urls
new file mode 100644
index 0000000..5365c8e
--- /dev/null
+++ b/gcc/c-family/c.opt.urls
@@ -0,0 +1,1433 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/c-family/c.opt and generated HTML
+
+A
+UrlSuffix(gcc/Preprocessor-Options.html#index-A)
+
+C
+UrlSuffix(gcc/Preprocessor-Options.html#index-C)
+
+CC
+UrlSuffix(gcc/Preprocessor-Options.html#index-CC)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping UrlSuffix for 'E' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-E-1'
+; duplicate: 'gcc/Overall-Options.html#index-E'
+
+F
+UrlSuffix(gcc/Darwin-Options.html#index-F)
+
+fgimple
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgimple)
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H) LangUrlSuffix_D(gdc/Code-Generation.html#index-H)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF) LangUrlSuffix_D(gdc/Code-Generation.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG) LangUrlSuffix_D(gdc/Code-Generation.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM) LangUrlSuffix_D(gdc/Code-Generation.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+
+Mno-modules
+UrlSuffix(gcc/Preprocessor-Options.html#index-Mno-modules)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP) LangUrlSuffix_D(gdc/Code-Generation.html#index-MP)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ) LangUrlSuffix_D(gdc/Code-Generation.html#index-MQ)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT) LangUrlSuffix_D(gdc/Code-Generation.html#index-MT)
+
+fdeps-format=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-format)
+
+fdeps-file=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-file)
+
+fdeps-target=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-target)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+U
+UrlSuffix(gcc/Preprocessor-Options.html#index-U)
+
+Wabi
+UrlSuffix(gcc/Warning-Options.html#index-Wabi)
+
+Wabi=
+UrlSuffix(gcc/Warning-Options.html#index-Wabi)
+
+Wabi-tag
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
+
+Wabsolute-value
+UrlSuffix(gcc/Warning-Options.html#index-Wabsolute-value)
+
+Waddress
+UrlSuffix(gcc/Warning-Options.html#index-Waddress)
+
+Waligned-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Waligned-new)
+
+Waligned-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Waligned-new)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+; duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+; duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Walloca
+UrlSuffix(gcc/Warning-Options.html#index-Walloca) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca)
+
+Walloc-size
+UrlSuffix(gcc/Warning-Options.html#index-Walloc-size)
+
+Walloc-size-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloc-size-larger-than_003d)
+
+Walloc-zero
+UrlSuffix(gcc/Warning-Options.html#index-Walloc-zero)
+
+Walloca-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloca-larger-than_003d) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca-larger-than)
+
+Warray-bounds=
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Warray-compare
+UrlSuffix(gcc/Warning-Options.html#index-Warray-compare)
+
+Warray-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-array-parameter)
+
+Warray-parameter=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-array-parameter)
+
+Wzero-length-bounds
+UrlSuffix(gcc/Warning-Options.html#index-Wzero-length-bounds)
+
+Wassign-intercept
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wassign-intercept)
+
+Wbad-function-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wbad-function-cast)
+
+Wbidi-chars
+UrlSuffix(gcc/Warning-Options.html#index-Wbidi-chars)
+
+Wbidi-chars=
+UrlSuffix(gcc/Warning-Options.html#index-Wbidi-chars)
+
+Wbool-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wbool-compare)
+
+Wbool-operation
+UrlSuffix(gcc/Warning-Options.html#index-Wbool-operation)
+
+Wframe-address
+UrlSuffix(gcc/Warning-Options.html#index-Wframe-address)
+
+Wbuiltin-declaration-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-mismatch) LangUrlSuffix_D(gdc/Warnings.html#index-Wbuiltin-declaration-mismatch)
+
+Wbuiltin-macro-redefined
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-macro-redefined)
+
+Wc11-c23-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc11-c23-compat)
+
+Wc90-c99-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc90-c99-compat)
+
+Wc99-c11-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc99-c11-compat)
+
+Wc++-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b-compat)
+
+Wc++11-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b11-compat)
+
+Wc++14-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b14-compat)
+
+Wc++17-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b17-compat)
+
+Wc++20-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b20-compat)
+
+Wc++11-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b11-extensions)
+
+Wc++14-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b14-extensions)
+
+Wc++17-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b17-extensions)
+
+Wc++20-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b20-extensions)
+
+Wc++23-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b23-extensions)
+
+Wc++26-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b26-extensions)
+
+Wcalloc-transposed-args
+UrlSuffix(gcc/Warning-Options.html#index-Wcalloc-transposed-args)
+
+Wcast-function-type
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-function-type)
+
+Wcast-qual
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-qual)
+
+Wcatch-value
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcatch-value)
+
+Wcatch-value=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcatch-value)
+
+Wchar-subscripts
+UrlSuffix(gcc/Warning-Options.html#index-Wchar-subscripts)
+
+Wclobbered
+UrlSuffix(gcc/Warning-Options.html#index-Wclobbered)
+
+Wcomma-subscript
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcomma-subscript)
+
+Wcomment
+UrlSuffix(gcc/Warning-Options.html#index-Wcomment)
+
+Wcomments
+UrlSuffix(gcc/Warning-Options.html#index-Wcomments)
+
+Wconditionally-supported
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wconditionally-supported)
+
+Wconversion
+UrlSuffix(gcc/Warning-Options.html#index-Wconversion)
+
+Wconversion-null
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wconversion-null)
+
+Wcpp
+UrlSuffix(gcc/Warning-Options.html#index-Wcpp)
+
+Wctad-maybe-unsupported
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported)
+
+Wctor-dtor-privacy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wctor-dtor-privacy)
+
+Wdangling-else
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-else)
+
+Wdangling-pointer
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-pointer)
+
+Wdangling-pointer=
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-pointer)
+
+Wdangling-reference
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference)
+
+Wdate-time
+UrlSuffix(gcc/Warning-Options.html#index-Wdate-time)
+
+Wdeclaration-after-statement
+UrlSuffix(gcc/Warning-Options.html#index-Wdeclaration-after-statement)
+
+Wdeclaration-missing-parameter-type
+UrlSuffix(gcc/Warning-Options.html#index-Wdeclaration-missing-parameter-type)
+
+Wdelete-incomplete
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdelete-incomplete)
+
+Wdelete-non-virtual-dtor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdelete-non-virtual-dtor)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated) LangUrlSuffix_D(gdc/Warnings.html#index-Wdeprecated)
+
+Wdeprecated-copy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy)
+
+Wdeprecated-enum-enum-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion)
+
+Wdeprecated-enum-float-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion)
+
+Wdesignated-init
+UrlSuffix(gcc/Warning-Options.html#index-Wdesignated-init)
+
+Wdiscarded-array-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wdiscarded-array-qualifiers)
+
+Wdiscarded-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wdiscarded-qualifiers)
+
+Wdiv-by-zero
+UrlSuffix(gcc/Warning-Options.html#index-Wdiv-by-zero)
+
+Wduplicated-branches
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicated-branches)
+
+Wduplicated-cond
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicated-cond)
+
+Weffc++
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Weffc_002b_002b)
+
+Wempty-body
+UrlSuffix(gcc/Warning-Options.html#index-Wempty-body)
+
+Wendif-labels
+UrlSuffix(gcc/Warning-Options.html#index-Wendif-labels)
+
+Wenum-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-compare)
+
+Wenum-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-conversion)
+
+Wenum-int-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-int-mismatch)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror) LangUrlSuffix_D(gdc/Warnings.html#index-Werror)
+
+Wexceptions
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexceptions)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra)
+
+Wextra-semi
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wextra-semi)
+
+Wfloat-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wfloat-conversion)
+
+Wfloat-equal
+UrlSuffix(gcc/Warning-Options.html#index-Wfloat-equal)
+
+Wformat
+UrlSuffix(gcc/Warning-Options.html#index-Wformat)
+
+Wformat-contains-nul
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-contains-nul)
+
+Wformat-extra-args
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-extra-args)
+
+Wformat-nonliteral
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-nonliteral)
+
+Wformat-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-overflow)
+
+Wformat-security
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-security)
+
+Wformat-signedness
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-signedness)
+
+Wformat-truncation
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-truncation)
+
+Wformat-y2k
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-y2k)
+
+Wformat-zero-length
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-zero-length)
+
+Wformat=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat)
+
+Wformat-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-overflow)
+
+Wformat-truncation=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-truncation)
+
+Wflex-array-member-not-at-end
+UrlSuffix(gcc/Warning-Options.html#index-Wflex-array-member-not-at-end)
+
+Wif-not-aligned
+UrlSuffix(gcc/Warning-Options.html#index-Wif-not-aligned)
+
+Wignored-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wignored-qualifiers)
+
+Wignored-attributes
+UrlSuffix(gcc/Warning-Options.html#index-Wignored-attributes)
+
+Winaccessible-base
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winaccessible-base)
+
+Wincompatible-pointer-types
+UrlSuffix(gcc/Warning-Options.html#index-Wincompatible-pointer-types)
+
+Winfinite-recursion
+UrlSuffix(gcc/Warning-Options.html#index-Winfinite-recursion)
+
+Waddress-of-packed-member
+UrlSuffix(gcc/Warning-Options.html#index-Waddress-of-packed-member)
+
+Winit-self
+UrlSuffix(gcc/Warning-Options.html#index-Winit-self)
+
+Winit-list-lifetime
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime)
+
+Winterference-size
+UrlSuffix(gcc/Warning-Options.html#index-Winterference-size)
+
+Wimplicit
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit)
+
+Wimplicit-fallthrough=
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Wdouble-promotion
+UrlSuffix(gcc/Warning-Options.html#index-Wdouble-promotion)
+
+Wexpansion-to-defined
+UrlSuffix(gcc/Warning-Options.html#index-Wexpansion-to-defined)
+
+Wimplicit-function-declaration
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-function-declaration)
+
+Wimplicit-int
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-int)
+
+Winherited-variadic-ctor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winherited-variadic-ctor)
+
+Wint-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wint-conversion)
+
+Wint-in-bool-context
+UrlSuffix(gcc/Warning-Options.html#index-Wint-in-bool-context)
+
+Wint-to-pointer-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wint-to-pointer-cast)
+
+Winvalid-constexpr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-constexpr)
+
+Winvalid-offsetof
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-offsetof)
+
+Winvalid-pch
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-pch)
+
+Winvalid-utf8
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-utf8)
+
+Wjump-misses-init
+UrlSuffix(gcc/Warning-Options.html#index-Wjump-misses-init)
+
+Wliteral-suffix
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wliteral-suffix)
+
+Wlogical-op
+UrlSuffix(gcc/Warning-Options.html#index-Wlogical-op)
+
+Wlogical-not-parentheses
+UrlSuffix(gcc/Warning-Options.html#index-Wlogical-not-parentheses)
+
+Wlong-long
+UrlSuffix(gcc/Warning-Options.html#index-Wlong-long)
+
+Wmain
+UrlSuffix(gcc/Warning-Options.html#index-Wmain)
+
+Wmain
+UrlSuffix(gcc/Warning-Options.html#index-Wmain)
+
+Wmemset-transposed-args
+UrlSuffix(gcc/Warning-Options.html#index-Wmemset-transposed-args)
+
+Wmemset-elt-size
+UrlSuffix(gcc/Warning-Options.html#index-Wmemset-elt-size)
+
+Wmisleading-indentation
+UrlSuffix(gcc/Warning-Options.html#index-Wmisleading-indentation)
+
+Wmismatched-dealloc
+UrlSuffix(gcc/Warning-Options.html#index-Wmismatched-dealloc)
+
+Wmismatched-new-delete
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete)
+
+Wmismatched-tags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags)
+
+Wmissing-braces
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-braces)
+
+Wmissing-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-declarations)
+
+Wmissing-field-initializers
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-field-initializers)
+
+Wmissing-requires
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-requires)
+
+Wmissing-template-keyword
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-template-keyword)
+
+Wmultistatement-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wmultistatement-macros)
+
+Wmultiple-inheritance
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmultiple-inheritance)
+
+Wnamespaces
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wnamespaces)
+
+Wnrvo
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nrvo)
+
+Wpacked-not-aligned
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed-not-aligned)
+
+Wrange-loop-construct
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-range-loop-construct)
+
+Wredundant-tags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-tags)
+
+Wsized-deallocation
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sized-deallocation)
+
+Wsizeof-pointer-div
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-pointer-div)
+
+Wsizeof-array-div
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-array-div)
+
+Wsizeof-pointer-memaccess
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-pointer-memaccess)
+
+Wsizeof-array-argument
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-array-argument)
+
+Wstring-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-string-compare)
+
+Wstringop-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overflow)
+
+Wstringop-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overflow)
+
+Wstringop-overread
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overread)
+
+Wstringop-truncation
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-truncation)
+
+Wstrict-flex-arrays
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-flex-arrays)
+
+Wsuggest-attribute=format
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dformat)
+
+Wsuggest-override
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-override)
+
+Wswitch
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch)
+
+Wswitch-default
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-default)
+
+Wswitch-enum
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-enum)
+
+Wswitch-bool
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-bool)
+
+Wswitch-outside-range
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-outside-range)
+
+Wtemplates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-templates)
+
+Wmissing-attributes
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-attributes)
+
+Wmissing-format-attribute
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-format-attribute)
+
+Wmissing-include-dirs
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-include-dirs)
+
+Wmissing-parameter-type
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-parameter-type)
+
+Wmissing-prototypes
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-prototypes)
+
+Wmissing-variable-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-variable-declarations)
+
+Wmultichar
+UrlSuffix(gcc/Warning-Options.html#index-Wmultichar)
+
+Wnarrowing
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wnarrowing)
+
+Wnested-externs
+UrlSuffix(gcc/Warning-Options.html#index-Wnested-externs)
+
+Wnoexcept
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept)
+
+Wnoexcept-type
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept-type)
+
+Wnon-template-friend
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-template-friend)
+
+Wclass-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion)
+
+Wclass-memaccess
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess)
+
+Wnon-virtual-dtor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-virtual-dtor)
+
+Wnonnull
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull)
+
+Wnonnull
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull)
+
+Wnonnull-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull-compare)
+
+Wnormalized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-normalized)
+
+Wnormalized=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-normalized)
+
+Wobjc-root-class
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wobjc-root-class)
+
+Wold-style-cast
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-old-style-cast)
+
+Wold-style-declaration
+UrlSuffix(gcc/Warning-Options.html#index-Wno-old-style-declaration)
+
+Wold-style-definition
+UrlSuffix(gcc/Warning-Options.html#index-Wno-old-style-definition)
+
+Wopenacc-parallelism
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openacc-parallelism)
+
+Wopenmp
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openmp)
+
+Wopenmp-simd
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openmp-simd)
+
+Woverlength-strings
+UrlSuffix(gcc/Warning-Options.html#index-Wno-overlength-strings)
+
+Woverloaded-virtual
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-overloaded-virtual)
+
+Woverloaded-virtual=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-overloaded-virtual)
+
+Woverride-init
+UrlSuffix(gcc/Warning-Options.html#index-Wno-override-init)
+
+Woverride-init-side-effects
+UrlSuffix(gcc/Warning-Options.html#index-Wno-override-init-side-effects)
+
+Wpacked-bitfield-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed-bitfield-compat)
+
+Wparentheses
+UrlSuffix(gcc/Warning-Options.html#index-Wno-parentheses)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wpessimizing-move
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-pessimizing-move)
+
+; skipping UrlSuffix for 'Wpmf-conversions' due to multiple URLs:
+; duplicate: 'gcc/Bound-member-functions.html#index-Wno-pmf-conversions-1'
+; duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-Wno-pmf-conversions'
+
+; skipping UrlSuffix for 'Wpointer-arith' due to multiple URLs:
+; duplicate: 'gcc/Pointer-Arith.html#index-Wpointer-arith-1'
+; duplicate: 'gcc/Warning-Options.html#index-Wno-pointer-arith'
+
+Wpointer-sign
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-sign)
+
+Wpointer-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-compare)
+
+Wpointer-to-int-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-to-int-cast)
+
+Wpragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pragmas)
+
+Wprio-ctor-dtor
+UrlSuffix(gcc/Warning-Options.html#index-Wno-prio-ctor-dtor)
+
+Wproperty-assign-default
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-property-assign-default)
+
+Wprotocol
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-protocol)
+
+Wplacement-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-placement-new)
+
+Wplacement-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-placement-new)
+
+Wredundant-decls
+UrlSuffix(gcc/Warning-Options.html#index-Wno-redundant-decls)
+
+Wredundant-move
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-move)
+
+Wregister
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-register)
+
+Wreorder
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-reorder)
+
+Wreturn-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-mismatch)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wscalar-storage-order
+UrlSuffix(gcc/Warning-Options.html#index-Wno-scalar-storage-order)
+
+Wselector
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-selector)
+
+Wself-move
+UrlSuffix(gcc/Warning-Options.html#index-Wno-self-move)
+
+Wsequence-point
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sequence-point)
+
+Wshadow-ivar
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shadow-ivar)
+
+Wshift-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-overflow)
+
+Wshift-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-overflow)
+
+Wshift-count-negative
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-count-negative)
+
+Wshift-count-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-count-overflow)
+
+Wshift-negative-value
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-negative-value)
+
+Warith-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Warith-conversion)
+
+Wsign-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-compare)
+
+Wsign-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-compare)
+
+Wsign-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-conversion)
+
+Wsign-promo
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sign-promo)
+
+Wstrict-null-sentinel
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-strict-null-sentinel)
+
+Wstrict-prototypes
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-prototypes)
+
+Wstrict-aliasing=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wstrict-selector-match
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-strict-selector-match)
+
+Wsync-nand
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sync-nand)
+
+Wsystem-headers
+UrlSuffix(gcc/Warning-Options.html#index-Wno-system-headers)
+
+Wtautological-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-tautological-compare)
+
+Wterminate
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-terminate)
+
+Wtraditional
+UrlSuffix(gcc/Warning-Options.html#index-Wno-traditional)
+
+Wtraditional-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wno-traditional-conversion)
+
+Wtrigraphs
+UrlSuffix(gcc/Warning-Options.html#index-Wtrigraphs)
+
+Wundeclared-selector
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-undeclared-selector)
+
+Wundef
+UrlSuffix(gcc/Warning-Options.html#index-Wno-undef)
+
+Wunicode
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unicode)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wunknown-pragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unknown-pragmas) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-unknown-pragmas)
+
+Wunsuffixed-float-constants
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unsuffixed-float-constants)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+Wunused-local-typedefs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-local-typedefs)
+
+Wunused-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wunused-macros)
+
+Wunused-result
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-result)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-const-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-const-variable=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wuse-after-free=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wvariadic-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wno-variadic-macros)
+
+Wvarargs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-varargs) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-varargs)
+
+Wvexing-parse
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-vexing-parse)
+
+Wvla
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla)
+
+Wvla-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla-larger-than)
+
+Wvla-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla-parameter)
+
+Wvolatile
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-volatile)
+
+Wvolatile-register-var
+UrlSuffix(gcc/Warning-Options.html#index-Wno-volatile-register-var)
+
+Wvirtual-inheritance
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-inheritance)
+
+Wvirtual-move-assign
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-move-assign)
+
+Wwrite-strings
+UrlSuffix(gcc/Warning-Options.html#index-Wno-write-strings)
+
+Wxor-used-as-pow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-xor-used-as-pow)
+
+Wzero-as-null-pointer-constant
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-zero-as-null-pointer-constant)
+
+Wuseless-cast
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-useless-cast)
+
+Wsubobject-linkage
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-subobject-linkage)
+
+Welaborated-enum-base
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Welaborated-enum-base)
+
+Wduplicate-decl-specifier
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicate-decl-specifier)
+
+Wrestrict
+UrlSuffix(gcc/Warning-Options.html#index-Wno-restrict)
+
+; skipping UrlSuffix for 'ansi' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-ansi-1'
+; duplicate: 'gcc/Non-bugs.html#index-ansi-3'
+; duplicate: 'gcc/Other-Builtins.html#index-ansi-2'
+; duplicate: 'gcc/Standards.html#index-ansi'
+
+; skipping UrlSuffix for 'd' due to multiple URLs:
+; duplicate: 'gcc/Developer-Options.html#index-d-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+fabi-compat-version=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fabi-compat-version)
+
+faccess-control
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faccess-control)
+
+fada-spec-parent=
+UrlSuffix(gcc/Overall-Options.html#index-fada-spec-parent)
+
+faligned-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faligned-new)
+
+faligned-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faligned-new)
+
+fasm
+UrlSuffix(gcc/C-Dialect-Options.html#index-fasm)
+
+; skipping UrlSuffix for 'fbuiltin' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-fbuiltin'
+; duplicate: 'gcc/Other-Builtins.html#index-fno-builtin-3'
+; duplicate: 'gcc/Warning-Options.html#index-fno-builtin-1'
+; skipping LangUrlSuffix_D for 'fbuiltin' due to multiple URLs:
+; duplicate: 'gdc/Other-Builtins.html#index-fno-builtin-1'
+; duplicate: 'gdc/Runtime-Options.html#index-fbuiltin'
+
+fcanonical-system-headers
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-canonical-system-headers)
+
+fchar8_t
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fchar8_005ft)
+
+fconcepts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconcepts)
+
+fconcepts-ts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconcepts-ts)
+
+fcond-mismatch
+UrlSuffix(gcc/C-Dialect-Options.html#index-fcond-mismatch)
+
+fconstant-string-class=
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fconstant-string-class)
+
+fconstexpr-depth=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-depth)
+
+fconstexpr-cache-depth=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-cache-depth)
+
+fconstexpr-fp-except
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-fp-except)
+
+fconstexpr-loop-limit=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-loop-limit)
+
+fconstexpr-ops-limit=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-ops-limit)
+
+fcontracts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontracts)
+
+fcontract-assumption-mode=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-assumption-mode)
+
+fcontract-build-level=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-build-level)
+
+fcontract-strict-declarations=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-strict-declarations)
+
+fcontract-mode=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-mode)
+
+fcontract-continuation-mode=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-continuation-mode)
+
+fcontract-role=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-role)
+
+fcoroutines
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcoroutines)
+
+fdebug-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-fdebug-cpp)
+
+fdeclone-ctor-dtor
+UrlSuffix(gcc/Optimize-Options.html#index-fdeclone-ctor-dtor)
+
+fdefault-inline
+UrlSuffix(gcc/Inline.html#index-fno-default-inline)
+
+fdiagnostics-show-template-tree
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-template-tree)
+
+fdiagnostics-all-candidates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fdiagnostics-all-candidates)
+
+fdirectives-only
+UrlSuffix(gcc/Preprocessor-Options.html#index-fdirectives-only)
+
+; skipping UrlSuffix for 'fdollars-in-identifiers' due to multiple URLs:
+; duplicate: 'gcc/Interoperation.html#index-fdollars-in-identifiers-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-fdollars-in-identifiers'
+
+fmacro-prefix-map=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fmacro-prefix-map)
+
+fdump-ada-spec
+UrlSuffix(gcc/Overall-Options.html#index-fdump-ada-spec)
+
+felide-constructors
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-felide-constructors)
+
+felide-type
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-felide-type)
+
+fenforce-eh-specs
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fenforce-eh-specs)
+
+fexec-charset=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fexec-charset)
+
+fextended-identifiers
+UrlSuffix(gcc/Preprocessor-Options.html#index-fextended-identifiers)
+
+finput-charset=
+UrlSuffix(gcc/Preprocessor-Options.html#index-finput-charset)
+
+fextern-tls-init
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fextern-tls-init)
+
+ffold-simple-inlines
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-ffold-simple-inlines)
+
+; skipping UrlSuffix for 'ffreestanding' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-ffreestanding-1'
+; duplicate: 'gcc/Standards.html#index-ffreestanding'
+; duplicate: 'gcc/Warning-Options.html#index-ffreestanding-2'
+
+fgnu-keywords
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fgnu-keywords)
+
+fgnu-runtime
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fgnu-runtime)
+
+fgnu89-inline
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgnu89-inline)
+
+fhosted
+UrlSuffix(gcc/C-Dialect-Options.html#index-fhosted)
+
+fimmediate-escalation
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fimmediate-escalation)
+
+; skipping UrlSuffix for 'fimplement-inlines' due to multiple URLs:
+; duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-fimplement-inlines'
+; duplicate: 'gcc/C_002b_002b-Interface.html#index-fno-implement-inlines-1'
+
+fimplicit-constexpr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-constexpr)
+
+fimplicit-inline-templates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-inline-templates)
+
+; skipping UrlSuffix for 'fimplicit-templates' due to multiple URLs:
+; duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-templates'
+; duplicate: 'gcc/Template-Instantiation.html#index-fno-implicit-templates-1'
+
+fnew-inheriting-ctors
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fnew-inheriting-ctors)
+
+fkeep-inline-dllexport
+UrlSuffix(gcc/Optimize-Options.html#index-fkeep-inline-dllexport)
+
+flax-vector-conversions
+UrlSuffix(gcc/C-Dialect-Options.html#index-flax-vector-conversions)
+
+fmodules-ts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodules-ts)
+
+fmodule-header
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-header)
+
+fmodule-header=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-header)
+
+fmodule-implicit-inline
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-implicit-inline)
+
+fmodule-only
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-only)
+
+fmodule-mapper=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-mapper)
+
+fmodule-lazy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-lazy)
+
+Winvalid-imported-macros
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-imported-macros)
+
+Wcompare-distinct-pointer-types
+UrlSuffix(gcc/Warning-Options.html#index-Wcompare-distinct-pointer-types)
+
+flang-info-include-translate
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate)
+
+flang-info-include-translate-not
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate-not)
+
+flang-info-include-translate=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate)
+
+flang-info-module-cmi
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-module-cmi)
+
+flang-info-module-cmi=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-module-cmi)
+
+fmax-include-depth=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fmax-include-depth)
+
+; skipping UrlSuffix for 'fms-extensions' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-fms-extensions'
+; duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-fms-extensions-1'
+; duplicate: 'gcc/Unnamed-Fields.html#index-fms-extensions-2'
+
+fnew-ttp-matching
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fnew-ttp-matching)
+
+fnext-runtime
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fnext-runtime)
+
+fnil-receivers
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fnil-receivers)
+
+flocal-ivars
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-flocal-ivars)
+
+fivar-visibility=
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fivar-visibility)
+
+fnonansi-builtins
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-nonansi-builtins)
+
+fnothrow-opt
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fnothrow-opt)
+
+fobjc-abi-version=
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-abi-version)
+
+fobjc-call-cxx-cdtors
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-call-cxx-cdtors)
+
+fobjc-direct-dispatch
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-direct-dispatch)
+
+fobjc-exceptions
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-exceptions)
+
+fobjc-gc
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-gc)
+
+fobjc-nilcheck
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-nilcheck)
+
+fopenacc
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc) LangUrlSuffix_Fortran(gfortran/Fortran-Dialect-Options.html#index-fopenacc)
+
+fopenacc-dim=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc-dim)
+
+fopenmp
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp) LangUrlSuffix_Fortran(gfortran/Fortran-Dialect-Options.html#index-fopenmp)
+
+fopenmp-simd
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-simd) LangUrlSuffix_Fortran(gfortran/Fortran-Dialect-Options.html#index-fopenmp-simd)
+
+foperator-names
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-operator-names)
+
+foptional-diags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-optional-diags)
+
+fpch-deps
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpch-deps)
+
+fpch-preprocess
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpch-preprocess)
+
+fpermissive
+UrlSuffix(gcc/Warning-Options.html#index-fpermissive)
+
+; skipping UrlSuffix for 'fplan9-extensions' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-fplan9-extensions'
+; duplicate: 'gcc/Unnamed-Fields.html#index-fplan9-extensions-1'
+
+fpreprocessed
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpreprocessed)
+
+ftrack-macro-expansion
+UrlSuffix(gcc/Preprocessor-Options.html#index-ftrack-macro-expansion)
+
+ftrack-macro-expansion=
+UrlSuffix(gcc/Preprocessor-Options.html#index-ftrack-macro-expansion)
+
+fpretty-templates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-pretty-templates)
+
+fprintf-return-value
+UrlSuffix(gcc/Optimize-Options.html#index-fno-printf-return-value)
+
+freplace-objc-classes
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-freplace-objc-classes)
+
+frtti
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti) LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-rtti)
+
+; skipping UrlSuffix for 'fshort-enums' due to multiple URLs:
+; duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+; duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+; duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+fshort-wchar
+UrlSuffix(gcc/Code-Gen-Options.html#index-fshort-wchar)
+
+; skipping UrlSuffix for 'fsigned-bitfields' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-fno-signed-bitfields'
+; duplicate: 'gcc/Non-bugs.html#index-fsigned-bitfields-1'
+
+; skipping UrlSuffix for 'fsigned-char' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-fsigned-char'
+; duplicate: 'gcc/Characters-implementation.html#index-fsigned-char-1'
+
+fsized-deallocation
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fsized-deallocation)
+
+fstrict-flex-arrays
+UrlSuffix(gcc/C-Dialect-Options.html#index-fno-strict-flex-arrays)
+
+fstrict-flex-arrays=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fno-strict-flex-arrays)
+
+fsso-struct=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fsso-struct)
+
+fstats
+UrlSuffix(gcc/Developer-Options.html#index-fstats)
+
+fstrict-enums
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fstrict-enums)
+
+fstrong-eval-order
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fstrong-eval-order)
+
+fstrong-eval-order=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fstrong-eval-order)
+
+ftemplate-backtrace-limit=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-ftemplate-backtrace-limit)
+
+ftemplate-depth=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-ftemplate-depth)
+
+fthreadsafe-statics
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-threadsafe-statics)
+
+; skipping UrlSuffix for 'funsigned-bitfields' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-fno-unsigned-bitfields'
+; duplicate: 'gcc/Non-bugs.html#index-funsigned-bitfields-2'
+; duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-funsigned-bitfields-1'
+
+; skipping UrlSuffix for 'funsigned-char' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-funsigned-char'
+; duplicate: 'gcc/Characters-implementation.html#index-funsigned-char-1'
+
+fuse-cxa-atexit
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fuse-cxa-atexit)
+
+fuse-cxa-get-exception-ptr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-use-cxa-get-exception-ptr)
+
+fvisibility-inlines-hidden
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fvisibility-inlines-hidden)
+
+fvisibility-ms-compat
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fvisibility-ms-compat)
+
+fweak
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-weak)
+
+fwide-exec-charset=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fwide-exec-charset)
+
+fworking-directory
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-working-directory)
+
+fzero-link
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fzero-link)
+
+gen-decls
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-gen-decls)
+
+femit-struct-debug-baseonly
+UrlSuffix(gcc/Debugging-Options.html#index-femit-struct-debug-baseonly)
+
+femit-struct-debug-reduced
+UrlSuffix(gcc/Debugging-Options.html#index-femit-struct-debug-reduced)
+
+femit-struct-debug-detailed=
+UrlSuffix(gcc/Debugging-Options.html#index-femit-struct-debug-detailed)
+
+fext-numeric-literals
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fext-numeric-literals)
+
+idirafter
+UrlSuffix(gcc/Directory-Options.html#index-idirafter)
+
+imacros
+UrlSuffix(gcc/Preprocessor-Options.html#index-imacros)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib) LangUrlSuffix_D(gdc/Directory-Options.html#index-imultilib)
+
+include
+UrlSuffix(gcc/Preprocessor-Options.html#index-include)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+iquote
+UrlSuffix(gcc/Directory-Options.html#index-iquote)
+
+iwithprefix
+UrlSuffix(gcc/Directory-Options.html#index-iwithprefix)
+
+iwithprefixbefore
+UrlSuffix(gcc/Directory-Options.html#index-iwithprefixbefore)
+
+no-integrated-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-no-integrated-cpp)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc) LangUrlSuffix_D(gdc/Directory-Options.html#index-nostdinc)
+
+; skipping UrlSuffix for 'nostdinc++' due to multiple URLs:
+; duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-nostdinc_002b_002b'
+; duplicate: 'gcc/Directory-Options.html#index-nostdinc_002b_002b-1'
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
+; skipping UrlSuffix for 'pedantic' due to multiple URLs:
+; duplicate: 'gcc/Alternate-Keywords.html#index-pedantic-3'
+; duplicate: 'gcc/C-Extensions.html#index-pedantic-2'
+; duplicate: 'gcc/Standards.html#index-pedantic'
+; duplicate: 'gcc/Warning-Options.html#index-pedantic-1'
+; duplicate: 'gcc/Warnings-and-Errors.html#index-pedantic-4'
+
+print-objc-runtime-info
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-print-objc-runtime-info)
+
+remap
+UrlSuffix(gcc/Preprocessor-Options.html#index-remap)
+
+stdlib=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-stdlib)
+
+; skipping UrlSuffix for 'traditional' due to multiple URLs:
+; duplicate: 'gcc/Incompatibilities.html#index-traditional-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-traditional'
+
+traditional-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-traditional-cpp)
+
+trigraphs
+UrlSuffix(gcc/Preprocessor-Options.html#index-trigraphs)
+
+undef
+UrlSuffix(gcc/Preprocessor-Options.html#index-undef)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v) LangUrlSuffix_D(gdc/Developer-Options.html#index-v)
+
+w
+UrlSuffix(gcc/Warning-Options.html#index-w)
+
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 7670dea..3e2b5b2 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,8 @@
+2024-01-03 Kwok Cheung Yeung <kcy@codesourcery.com>
+
+ * c-parser.cc (c_parser_omp_clause_name): Move handling of indirect
+ clause to correspond to alphabetical order.
+
2023-12-30 Martin Uecker <uecker@tugraz.at>
* c-typeck.cc (tagged_types_tu_compatible_p): Revise.
diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
index 64e4360..e7b74fb 100644
--- a/gcc/c/c-parser.cc
+++ b/gcc/c/c-parser.cc
@@ -14899,10 +14899,10 @@ c_parser_omp_clause_name (c_parser *parser)
result = PRAGMA_OMP_CLAUSE_IN_REDUCTION;
else if (!strcmp ("inbranch", p))
result = PRAGMA_OMP_CLAUSE_INBRANCH;
- else if (!strcmp ("indirect", p))
- result = PRAGMA_OMP_CLAUSE_INDIRECT;
else if (!strcmp ("independent", p))
result = PRAGMA_OACC_CLAUSE_INDEPENDENT;
+ else if (!strcmp ("indirect", p))
+ result = PRAGMA_OMP_CLAUSE_INDIRECT;
else if (!strcmp ("is_device_ptr", p))
result = PRAGMA_OMP_CLAUSE_IS_DEVICE_PTR;
break;
diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls
new file mode 100644
index 0000000..4cb2d7d
--- /dev/null
+++ b/gcc/common.opt.urls
@@ -0,0 +1,1862 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/common.opt and generated HTML
+
+###
+UrlSuffix(gcc/Overall-Options.html#index-_0023_0023_0023)
+
+fversion
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fversion)
+
+B
+UrlSuffix(gcc/Directory-Options.html#index-B) LangUrlSuffix_D(gdc/Directory-Options.html#index-B)
+
+; skipping UrlSuffix for 'E' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-E-1'
+; duplicate: 'gcc/Overall-Options.html#index-E'
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
+
+O
+UrlSuffix(gcc/Optimize-Options.html#index-O)
+
+Os
+UrlSuffix(gcc/Optimize-Options.html#index-Os)
+
+Ofast
+UrlSuffix(gcc/Optimize-Options.html#index-Ofast)
+
+Og
+UrlSuffix(gcc/Optimize-Options.html#index-Og)
+
+Oz
+UrlSuffix(gcc/Optimize-Options.html#index-Oz)
+
+Q
+UrlSuffix(gcc/Developer-Options.html#index-Q)
+
+Qn
+UrlSuffix(gcc/System-V-Options.html#index-Qn)
+
+Qy
+UrlSuffix(gcc/System-V-Options.html#index-Qy)
+
+; skipping UrlSuffix for 'S' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-S-1'
+; duplicate: 'gcc/Overall-Options.html#index-S'
+
+T
+UrlSuffix(gcc/Link-Options.html#index-T)
+
+; skipping UrlSuffix for 'W' due to multiple URLs:
+; duplicate: 'gcc/Incompatibilities.html#index-W-3'
+; duplicate: 'gcc/Warning-Options.html#index-W'
+
+Waggregate-return
+UrlSuffix(gcc/Warning-Options.html#index-Waggregate-return)
+
+Waggressive-loop-optimizations
+UrlSuffix(gcc/Warning-Options.html#index-Waggressive-loop-optimizations)
+
+Warray-bounds
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Warray-bounds=
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Wuse-after-free
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wuse-after-free=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wattributes
+UrlSuffix(gcc/Warning-Options.html#index-Wattributes)
+
+Wattributes=
+UrlSuffix(gcc/Warning-Options.html#index-Wattributes)
+
+Wattribute-alias
+UrlSuffix(gcc/Warning-Options.html#index-Wattribute-alias)
+
+Wattribute-alias=
+UrlSuffix(gcc/Warning-Options.html#index-Wattribute-alias)
+
+Wcast-align
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-align)
+
+Wcast-align=strict
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-align_003dstrict)
+
+Wcomplain-wrong-lang
+UrlSuffix(gcc/Warning-Options.html#index-Wcomplain-wrong-lang)
+
+Wcpp
+UrlSuffix(gcc/Warning-Options.html#index-Wcpp)
+
+Wattribute-warning
+UrlSuffix(gcc/Warning-Options.html#index-Wattribute-warning)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated) LangUrlSuffix_D(gdc/Warnings.html#index-Wdeprecated)
+
+Wdeprecated-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated-declarations)
+
+Wdisabled-optimization
+UrlSuffix(gcc/Warning-Options.html#index-Wdisabled-optimization)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror) LangUrlSuffix_D(gdc/Warnings.html#index-Werror)
+
+Werror=
+UrlSuffix(gcc/Warning-Options.html#index-Werror) LangUrlSuffix_D(gdc/Warnings.html#index-Werror)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra)
+
+Wfatal-errors
+UrlSuffix(gcc/Warning-Options.html#index-Wfatal-errors)
+
+Wframe-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wframe-larger-than_003d)
+
+Wfree-nonheap-object
+UrlSuffix(gcc/Warning-Options.html#index-Wfree-nonheap-object)
+
+Whardened
+UrlSuffix(gcc/Warning-Options.html#index-Whardened)
+
+Wimplicit-fallthrough
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Wimplicit-fallthrough=
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Winfinite-recursion
+UrlSuffix(gcc/Warning-Options.html#index-Winfinite-recursion)
+
+; skipping UrlSuffix for 'Winline' due to multiple URLs:
+; duplicate: 'gcc/Inline.html#index-Winline-1'
+; duplicate: 'gcc/Warning-Options.html#index-Winline'
+
+Winvalid-memory-model
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-memory-model)
+
+Wlarger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wlarger-than_003d)
+
+Wnonnull-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull-compare)
+
+Wnull-dereference
+UrlSuffix(gcc/Warning-Options.html#index-Wno-null-dereference)
+
+Wunsafe-loop-optimizations
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unsafe-loop-optimizations)
+
+Wmissing-noreturn
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-noreturn)
+
+Wodr
+UrlSuffix(gcc/Warning-Options.html#index-Wno-odr)
+
+Woverflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-overflow)
+
+Wlto-type-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wlto-type-mismatch)
+
+Wpacked
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed)
+
+Wpadded
+UrlSuffix(gcc/Warning-Options.html#index-Wno-padded)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wreturn-local-addr
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-local-addr)
+
+Wshadow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shadow)
+
+Wshadow=global
+UrlSuffix(gcc/Warning-Options.html#index-Wshadow_003dglobal)
+
+Wshadow=local
+UrlSuffix(gcc/Warning-Options.html#index-Wshadow_003dlocal)
+
+Wshadow=compatible-local
+UrlSuffix(gcc/Warning-Options.html#index-Wshadow_003dcompatible-local)
+
+Wstack-protector
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stack-protector)
+
+Wstack-usage=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stack-usage)
+
+Wstrict-aliasing
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-aliasing=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wstrict-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wsuggest-attribute=cold
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dcold)
+
+Wsuggest-attribute=const
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dconst)
+
+Wsuggest-attribute=pure
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dpure)
+
+Wsuggest-attribute=noreturn
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dnoreturn)
+
+Wsuggest-attribute=malloc
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dmalloc)
+
+Wsuggest-final-types
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-final-types)
+
+Wsuggest-final-methods
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-final-methods)
+
+Wswitch-unreachable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-unreachable)
+
+Wsystem-headers
+UrlSuffix(gcc/Warning-Options.html#index-Wno-system-headers)
+
+Wtrampolines
+UrlSuffix(gcc/Warning-Options.html#index-Wno-trampolines)
+
+Wtrivial-auto-var-init
+UrlSuffix(gcc/Warning-Options.html#index-Wno-trivial-auto-var-init)
+
+Wtype-limits
+UrlSuffix(gcc/Warning-Options.html#index-Wno-type-limits)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+Wunused-but-set-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-parameter)
+
+Wunused-but-set-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-variable)
+
+Wunused-function
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-function)
+
+Wunused-label
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-label)
+
+Wunused-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-parameter)
+
+Wunused-value
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-value)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wcoverage-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-mismatch)
+
+Wcoverage-invalid-line-number
+UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-invalid-line-number)
+
+Wmissing-profile
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-profile)
+
+Wvector-operation-performance
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vector-operation-performance)
+
+Wtsan
+UrlSuffix(gcc/Warning-Options.html#index-Wno-tsan)
+
+Xassembler
+UrlSuffix(gcc/Assembler-Options.html#index-Xassembler)
+
+Xlinker
+UrlSuffix(gcc/Link-Options.html#index-Xlinker)
+
+Xpreprocessor
+UrlSuffix(gcc/Preprocessor-Options.html#index-Xpreprocessor)
+
+aux-info
+UrlSuffix(gcc/C-Dialect-Options.html#index-aux-info)
+
+aux-info=
+UrlSuffix(gcc/C-Dialect-Options.html#index-aux-info)
+
+coverage
+UrlSuffix(gcc/Instrumentation-Options.html#index-coverage)
+
+; skipping UrlSuffix for 'c' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-c-1'
+; duplicate: 'gcc/Overall-Options.html#index-c'
+
+; skipping UrlSuffix for 'd' due to multiple URLs:
+; duplicate: 'gcc/Developer-Options.html#index-d-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+dumpbase
+UrlSuffix(gcc/Overall-Options.html#index-dumpbase)
+
+dumpbase-ext
+UrlSuffix(gcc/Overall-Options.html#index-dumpbase-ext)
+
+dumpdir
+UrlSuffix(gcc/Overall-Options.html#index-dumpdir)
+
+dumpmachine
+UrlSuffix(gcc/Developer-Options.html#index-dumpmachine)
+
+dumpspecs
+UrlSuffix(gcc/Developer-Options.html#index-dumpspecs)
+
+dumpversion
+UrlSuffix(gcc/Developer-Options.html#index-dumpversion)
+
+dumpfullversion
+UrlSuffix(gcc/Developer-Options.html#index-dumpfullversion)
+
+e
+UrlSuffix(gcc/Link-Options.html#index-e)
+
+fabi-version=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fabi-version)
+
+faggressive-loop-optimizations
+UrlSuffix(gcc/Optimize-Options.html#index-faggressive-loop-optimizations)
+
+falign-functions
+UrlSuffix(gcc/Optimize-Options.html#index-falign-functions)
+
+falign-functions=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-functions)
+
+falign-jumps
+UrlSuffix(gcc/Optimize-Options.html#index-falign-jumps)
+
+falign-jumps=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-jumps)
+
+falign-labels
+UrlSuffix(gcc/Optimize-Options.html#index-falign-labels)
+
+falign-labels=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-labels)
+
+falign-loops
+UrlSuffix(gcc/Optimize-Options.html#index-falign-loops)
+
+falign-loops=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-loops)
+
+fallow-store-data-races
+UrlSuffix(gcc/Optimize-Options.html#index-fallow-store-data-races)
+
+fanalyzer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer)
+
+fasan-shadow-offset=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fasan-shadow-offset)
+
+fsanitize-sections=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsanitize-sections)
+
+fsanitize-recover=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-recover)
+
+fsanitize-recover
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-recover)
+
+fsanitize-trap=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-trap)
+
+fsanitize-trap
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-trap)
+
+fsanitize-address-use-after-scope
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsanitize-address-use-after-scope)
+
+fsanitize-undefined-trap-on-error
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsanitize-undefined-trap-on-error)
+
+fasynchronous-unwind-tables
+UrlSuffix(gcc/Code-Gen-Options.html#index-fasynchronous-unwind-tables)
+
+fauto-inc-dec
+UrlSuffix(gcc/Optimize-Options.html#index-fauto-inc-dec)
+
+fauto-profile
+UrlSuffix(gcc/Optimize-Options.html#index-fauto-profile)
+
+fauto-profile=
+UrlSuffix(gcc/Optimize-Options.html#index-fauto-profile)
+
+fbounds-check
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fbounds-check)
+
+fbranch-count-reg
+UrlSuffix(gcc/Optimize-Options.html#index-fbranch-count-reg)
+
+fbranch-probabilities
+UrlSuffix(gcc/Optimize-Options.html#index-fbranch-probabilities)
+
+fcallgraph-info
+UrlSuffix(gcc/Developer-Options.html#index-fcallgraph-info)
+
+fcallgraph-info=
+UrlSuffix(gcc/Developer-Options.html#index-fcallgraph-info)
+
+fcaller-saves
+UrlSuffix(gcc/Optimize-Options.html#index-fcaller-saves)
+
+fcheck-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcheck-new)
+
+fchecking
+UrlSuffix(gcc/Developer-Options.html#index-fchecking)
+
+fchecking=
+UrlSuffix(gcc/Developer-Options.html#index-fchecking)
+
+fcanon-prefix-map
+UrlSuffix(gcc/Overall-Options.html#index-fcanon-prefix-map)
+
+fcode-hoisting
+UrlSuffix(gcc/Optimize-Options.html#index-fcode-hoisting)
+
+fcombine-stack-adjustments
+UrlSuffix(gcc/Optimize-Options.html#index-fcombine-stack-adjustments)
+
+fcommon
+UrlSuffix(gcc/Code-Gen-Options.html#index-fcommon)
+
+fcompare-debug
+UrlSuffix(gcc/Developer-Options.html#index-fcompare-debug)
+
+fcompare-debug=
+UrlSuffix(gcc/Developer-Options.html#index-fcompare-debug)
+
+fcompare-debug-second
+UrlSuffix(gcc/Developer-Options.html#index-fcompare-debug-second)
+
+fcompare-elim
+UrlSuffix(gcc/Optimize-Options.html#index-fcompare-elim)
+
+fconserve-stack
+UrlSuffix(gcc/Optimize-Options.html#index-fconserve-stack)
+
+fcprop-registers
+UrlSuffix(gcc/Optimize-Options.html#index-fcprop-registers)
+
+ffold-mem-offsets
+UrlSuffix(gcc/Optimize-Options.html#index-ffold-mem-offsets)
+
+fcrossjumping
+UrlSuffix(gcc/Optimize-Options.html#index-fcrossjumping)
+
+fcse-follow-jumps
+UrlSuffix(gcc/Optimize-Options.html#index-fcse-follow-jumps)
+
+fcse-skip-blocks
+UrlSuffix(gcc/Optimize-Options.html#index-fcse-skip-blocks)
+
+fcx-limited-range
+UrlSuffix(gcc/Optimize-Options.html#index-fcx-limited-range)
+
+fcx-fortran-rules
+UrlSuffix(gcc/Optimize-Options.html#index-fcx-fortran-rules)
+
+fdata-sections
+UrlSuffix(gcc/Optimize-Options.html#index-fdata-sections)
+
+fdbg-cnt-list
+UrlSuffix(gcc/Developer-Options.html#index-fdbg-cnt-list)
+
+fdbg-cnt=
+UrlSuffix(gcc/Developer-Options.html#index-fdbg-cnt)
+
+fdebug-prefix-map=
+UrlSuffix(gcc/Debugging-Options.html#index-fdebug-prefix-map)
+
+ffile-prefix-map=
+UrlSuffix(gcc/Overall-Options.html#index-ffile-prefix-map)
+
+fdebug-types-section
+UrlSuffix(gcc/Debugging-Options.html#index-fdebug-types-section)
+
+fdefer-pop
+UrlSuffix(gcc/Optimize-Options.html#index-fdefer-pop)
+
+fdelayed-branch
+UrlSuffix(gcc/Optimize-Options.html#index-fdelayed-branch)
+
+fdelete-dead-exceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fdelete-dead-exceptions)
+
+fdelete-null-pointer-checks
+UrlSuffix(gcc/Optimize-Options.html#index-fdelete-null-pointer-checks)
+
+fdevirtualize-at-ltrans
+UrlSuffix(gcc/Optimize-Options.html#index-fdevirtualize-at-ltrans)
+
+fdevirtualize-speculatively
+UrlSuffix(gcc/Optimize-Options.html#index-fdevirtualize-speculatively)
+
+fdevirtualize
+UrlSuffix(gcc/Optimize-Options.html#index-fdevirtualize)
+
+fdiagnostics-show-location=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-location)
+
+fdiagnostics-show-caret
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-caret)
+
+fdiagnostics-show-labels
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-labels)
+
+fdiagnostics-show-line-numbers
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-line-numbers)
+
+fdiagnostics-color
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-color)
+
+fdiagnostics-color=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-color)
+
+fdiagnostics-json-formatting
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-json-formatting)
+
+fdiagnostics-urls=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls)
+
+fdiagnostics-column-unit=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit)
+
+fdiagnostics-column-origin=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin)
+
+fdiagnostics-format=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format)
+
+fdiagnostics-escape-format=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-escape-format)
+
+fdiagnostics-parseable-fixits
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-parseable-fixits)
+
+fdiagnostics-generate-patch
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-generate-patch)
+
+fdiagnostics-show-option
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-option)
+
+fdiagnostics-show-cwe
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-cwe)
+
+fdiagnostics-show-rules
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-rules)
+
+fdiagnostics-path-format=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format)
+
+ftabstop=
+UrlSuffix(gcc/Preprocessor-Options.html#index-ftabstop)
+
+fdiagnostics-show-path-depths
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-path-depths)
+
+fdiagnostics-text-art-charset=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-text-art-charset)
+
+fdiagnostics-minimum-margin-width=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-minimum-margin-width)
+
+fdisable-
+UrlSuffix(gcc/Developer-Options.html#index-fdisable-)
+
+fenable-
+UrlSuffix(gcc/Developer-Options.html#index-fenable-)
+
+fdump-final-insns
+UrlSuffix(gcc/Developer-Options.html#index-fdump-final-insns)
+
+fdump-final-insns=
+UrlSuffix(gcc/Developer-Options.html#index-fdump-final-insns)
+
+fdump-go-spec=
+UrlSuffix(gcc/Overall-Options.html#index-fdump-go-spec)
+
+fdump-noaddr
+UrlSuffix(gcc/Developer-Options.html#index-fdump-noaddr)
+
+freport-bug
+UrlSuffix(gcc/Developer-Options.html#index-freport-bug)
+
+fdump-passes
+UrlSuffix(gcc/Developer-Options.html#index-fdump-passes)
+
+fdump-unnumbered
+UrlSuffix(gcc/Developer-Options.html#index-fdump-unnumbered)
+
+fdump-unnumbered-links
+UrlSuffix(gcc/Developer-Options.html#index-fdump-unnumbered-links)
+
+fdwarf2-cfi-asm
+UrlSuffix(gcc/Debugging-Options.html#index-fdwarf2-cfi-asm)
+
+fearly-inlining
+UrlSuffix(gcc/Optimize-Options.html#index-fearly-inlining)
+
+fipa-sra
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-sra)
+
+feliminate-unused-debug-symbols
+UrlSuffix(gcc/Debugging-Options.html#index-feliminate-unused-debug-symbols)
+
+feliminate-unused-debug-types
+UrlSuffix(gcc/Debugging-Options.html#index-feliminate-unused-debug-types)
+
+femit-class-debug-always
+UrlSuffix(gcc/Debugging-Options.html#index-femit-class-debug-always)
+
+fexceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
+
+fexpensive-optimizations
+UrlSuffix(gcc/Optimize-Options.html#index-fexpensive-optimizations)
+
+fexcess-precision=
+UrlSuffix(gcc/Optimize-Options.html#index-fexcess-precision)
+
+fpermitted-flt-eval-methods=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fpermitted-flt-eval-methods)
+
+ffast-math
+UrlSuffix(gcc/Optimize-Options.html#index-ffast-math)
+
+ffat-lto-objects
+UrlSuffix(gcc/Optimize-Options.html#index-ffat-lto-objects)
+
+ffinite-math-only
+UrlSuffix(gcc/Optimize-Options.html#index-ffinite-math-only)
+
+ffinite-loops
+UrlSuffix(gcc/Optimize-Options.html#index-ffinite-loops)
+
+; skipping UrlSuffix for 'ffloat-store' due to multiple URLs:
+; duplicate: 'gcc/Disappointments.html#index-ffloat-store-1'
+; duplicate: 'gcc/Optimize-Options.html#index-ffloat-store'
+
+fforward-propagate
+UrlSuffix(gcc/Optimize-Options.html#index-fforward-propagate)
+
+ffp-contract=
+UrlSuffix(gcc/Optimize-Options.html#index-ffp-contract)
+
+ffp-int-builtin-inexact
+UrlSuffix(gcc/Optimize-Options.html#index-ffp-int-builtin-inexact)
+
+ffunction-cse
+UrlSuffix(gcc/Optimize-Options.html#index-ffunction-cse)
+
+ffunction-sections
+UrlSuffix(gcc/Optimize-Options.html#index-ffunction-sections)
+
+fgcse
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse)
+
+fgcse-lm
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-lm)
+
+fgcse-sm
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-sm)
+
+fgcse-las
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-las)
+
+fgcse-after-reload
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-after-reload)
+
+fgraphite-identity
+UrlSuffix(gcc/Optimize-Options.html#index-fgraphite-identity)
+
+fhoist-adjacent-loads
+UrlSuffix(gcc/Optimize-Options.html#index-fhoist-adjacent-loads)
+
+flarge-source-files
+UrlSuffix(gcc/Preprocessor-Options.html#index-flarge-source-files)
+
+floop-parallelize-all
+UrlSuffix(gcc/Optimize-Options.html#index-floop-parallelize-all)
+
+floop-strip-mine
+UrlSuffix(gcc/Optimize-Options.html#index-floop-strip-mine)
+
+floop-interchange
+UrlSuffix(gcc/Optimize-Options.html#index-floop-interchange)
+
+floop-block
+UrlSuffix(gcc/Optimize-Options.html#index-floop-block)
+
+floop-unroll-and-jam
+UrlSuffix(gcc/Optimize-Options.html#index-floop-unroll-and-jam)
+
+fgnu-tm
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgnu-tm)
+
+fgnu-unique
+UrlSuffix(gcc/Code-Gen-Options.html#index-fgnu-unique)
+
+floop-nest-optimize
+UrlSuffix(gcc/Optimize-Options.html#index-floop-nest-optimize)
+
+fstrict-volatile-bitfields
+UrlSuffix(gcc/Code-Gen-Options.html#index-fstrict-volatile-bitfields)
+
+fstore-merging
+UrlSuffix(gcc/Optimize-Options.html#index-fstore-merging)
+
+fguess-branch-probability
+UrlSuffix(gcc/Optimize-Options.html#index-fguess-branch-probability)
+
+fhardened
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardened)
+
+fharden-compares
+UrlSuffix(gcc/Instrumentation-Options.html#index-fharden-compares)
+
+fharden-conditional-branches
+UrlSuffix(gcc/Instrumentation-Options.html#index-fharden-conditional-branches)
+
+fharden-control-flow-redundancy
+UrlSuffix(gcc/Instrumentation-Options.html#index-fharden-control-flow-redundancy)
+
+fhardcfr-skip-leaf
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-skip-leaf)
+
+fhardcfr-check-returning-calls
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-check-returning-calls)
+
+fhardcfr-check-exceptions
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-check-exceptions)
+
+fhardcfr-check-noreturn-calls=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-check-noreturn-calls)
+
+fident
+UrlSuffix(gcc/Code-Gen-Options.html#index-fident)
+
+fif-conversion
+UrlSuffix(gcc/Optimize-Options.html#index-fif-conversion)
+
+fif-conversion2
+UrlSuffix(gcc/Optimize-Options.html#index-fif-conversion2)
+
+ftree-loop-if-convert
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-if-convert)
+
+finhibit-size-directive
+UrlSuffix(gcc/Code-Gen-Options.html#index-finhibit-size-directive)
+
+findirect-inlining
+UrlSuffix(gcc/Optimize-Options.html#index-findirect-inlining)
+
+finline
+UrlSuffix(gcc/Optimize-Options.html#index-finline)
+
+finline-small-functions
+UrlSuffix(gcc/Optimize-Options.html#index-finline-small-functions)
+
+finline-functions
+UrlSuffix(gcc/Optimize-Options.html#index-finline-functions)
+
+finline-functions-called-once
+UrlSuffix(gcc/Optimize-Options.html#index-finline-functions-called-once)
+
+finline-limit=
+UrlSuffix(gcc/Optimize-Options.html#index-finline-limit)
+
+finline-stringops
+UrlSuffix(gcc/Optimize-Options.html#index-finline-stringops)
+
+finline-stringops=
+UrlSuffix(gcc/Optimize-Options.html#index-finline-stringops)
+
+fcf-protection
+UrlSuffix(gcc/Instrumentation-Options.html#index-fcf-protection)
+
+fcf-protection=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fcf-protection)
+
+finstrument-functions
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions)
+
+finstrument-functions-once
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions-once)
+
+finstrument-functions-exclude-function-list=
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions-exclude-function-list)
+
+finstrument-functions-exclude-file-list=
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions-exclude-file-list)
+
+fipa-cp
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-cp)
+
+fipa-cp-clone
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-cp-clone)
+
+fipa-bit-cp
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-bit-cp)
+
+fipa-modref
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-modref)
+
+fipa-profile
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-profile)
+
+fipa-pta
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-pta)
+
+fipa-pure-const
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-pure-const)
+
+fipa-icf
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-icf)
+
+fipa-reference
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-reference)
+
+fipa-reference-addressable
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-reference-addressable)
+
+fipa-stack-alignment
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-stack-alignment)
+
+fipa-vrp
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-vrp)
+
+fira-algorithm=
+UrlSuffix(gcc/Optimize-Options.html#index-fira-algorithm)
+
+fipa-strict-aliasing
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-strict-aliasing)
+
+fira-region=
+UrlSuffix(gcc/Optimize-Options.html#index-fira-region)
+
+fira-hoist-pressure
+UrlSuffix(gcc/Optimize-Options.html#index-fira-hoist-pressure)
+
+fira-loop-pressure
+UrlSuffix(gcc/Optimize-Options.html#index-fira-loop-pressure)
+
+fira-share-save-slots
+UrlSuffix(gcc/Optimize-Options.html#index-fira-share-save-slots)
+
+fira-share-spill-slots
+UrlSuffix(gcc/Optimize-Options.html#index-fira-share-spill-slots)
+
+fira-verbose=
+UrlSuffix(gcc/Developer-Options.html#index-fira-verbose)
+
+fivopts
+UrlSuffix(gcc/Optimize-Options.html#index-fivopts)
+
+fjump-tables
+UrlSuffix(gcc/Code-Gen-Options.html#index-fjump-tables)
+
+fbit-tests
+UrlSuffix(gcc/Code-Gen-Options.html#index-fbit-tests)
+
+; skipping UrlSuffix for 'fkeep-inline-functions' due to multiple URLs:
+; duplicate: 'gcc/Inline.html#index-fkeep-inline-functions-1'
+; duplicate: 'gcc/Optimize-Options.html#index-fkeep-inline-functions'
+
+fkeep-static-functions
+UrlSuffix(gcc/Optimize-Options.html#index-fkeep-static-functions)
+
+fkeep-static-consts
+UrlSuffix(gcc/Optimize-Options.html#index-fkeep-static-consts)
+
+fleading-underscore
+UrlSuffix(gcc/Code-Gen-Options.html#index-fleading-underscore)
+
+flra-remat
+UrlSuffix(gcc/Optimize-Options.html#index-flra-remat)
+
+flto
+UrlSuffix(gcc/Optimize-Options.html#index-flto)
+
+flto=
+UrlSuffix(gcc/Optimize-Options.html#index-flto)
+
+flto-partition=
+UrlSuffix(gcc/Optimize-Options.html#index-flto-partition)
+
+flto-compression-level=
+UrlSuffix(gcc/Optimize-Options.html#index-flto-compression-level)
+
+flto-report
+UrlSuffix(gcc/Developer-Options.html#index-flto-report)
+
+flto-report-wpa
+UrlSuffix(gcc/Developer-Options.html#index-flto-report-wpa)
+
+fmath-errno
+UrlSuffix(gcc/Optimize-Options.html#index-fmath-errno)
+
+fmax-errors=
+UrlSuffix(gcc/Warning-Options.html#index-fmax-errors) LangUrlSuffix_D(gdc/Warnings.html#index-fmax-errors)
+
+fmem-report
+UrlSuffix(gcc/Developer-Options.html#index-fmem-report)
+
+fmem-report-wpa
+UrlSuffix(gcc/Developer-Options.html#index-fmem-report-wpa)
+
+fmerge-all-constants
+UrlSuffix(gcc/Optimize-Options.html#index-fmerge-all-constants)
+
+fmerge-constants
+UrlSuffix(gcc/Optimize-Options.html#index-fmerge-constants)
+
+fmerge-debug-strings
+UrlSuffix(gcc/Debugging-Options.html#index-fmerge-debug-strings)
+
+fmessage-length=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fmessage-length)
+
+fmodulo-sched
+UrlSuffix(gcc/Optimize-Options.html#index-fmodulo-sched)
+
+fmodulo-sched-allow-regmoves
+UrlSuffix(gcc/Optimize-Options.html#index-fmodulo-sched-allow-regmoves)
+
+fmove-loop-invariants
+UrlSuffix(gcc/Optimize-Options.html#index-fmove-loop-invariants)
+
+fmove-loop-stores
+UrlSuffix(gcc/Optimize-Options.html#index-fmove-loop-stores)
+
+fmultiflags
+UrlSuffix(gcc/Developer-Options.html#index-fmultiflags)
+
+fdce
+UrlSuffix(gcc/Optimize-Options.html#index-fdce)
+
+fdse
+UrlSuffix(gcc/Optimize-Options.html#index-fdse)
+
+freschedule-modulo-scheduled-loops
+UrlSuffix(gcc/Optimize-Options.html#index-freschedule-modulo-scheduled-loops)
+
+fnon-call-exceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fnon-call-exceptions)
+
+foffload=
+UrlSuffix(gcc/C-Dialect-Options.html#index-foffload)
+
+foffload-options=
+UrlSuffix(gcc/C-Dialect-Options.html#index-foffload-options)
+
+fomit-frame-pointer
+UrlSuffix(gcc/Optimize-Options.html#index-fomit-frame-pointer)
+
+fopenmp-target-simd-clone
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-target-simd-clone)
+
+fopenmp-target-simd-clone=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-target-simd-clone)
+
+fopt-info
+UrlSuffix(gcc/Developer-Options.html#index-fopt-info)
+
+fsave-optimization-record
+UrlSuffix(gcc/Developer-Options.html#index-fsave-optimization-record)
+
+foptimize-sibling-calls
+UrlSuffix(gcc/Optimize-Options.html#index-foptimize-sibling-calls)
+
+fpartial-inlining
+UrlSuffix(gcc/Optimize-Options.html#index-fpartial-inlining)
+
+fpre-ipa-mem-report
+UrlSuffix(gcc/Developer-Options.html#index-fpre-ipa-mem-report)
+
+fpost-ipa-mem-report
+UrlSuffix(gcc/Developer-Options.html#index-fpost-ipa-mem-report)
+
+fpack-struct
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpack-struct)
+
+fpack-struct=
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpack-struct)
+
+; skipping UrlSuffix for 'fpcc-struct-return' due to multiple URLs:
+; duplicate: 'gcc/Code-Gen-Options.html#index-fpcc-struct-return'
+; duplicate: 'gcc/Incompatibilities.html#index-fpcc-struct-return-1'
+
+fpeel-loops
+UrlSuffix(gcc/Optimize-Options.html#index-fpeel-loops)
+
+fpeephole
+UrlSuffix(gcc/Optimize-Options.html#index-fno-peephole)
+
+fpeephole2
+UrlSuffix(gcc/Optimize-Options.html#index-fno-peephole2)
+
+fPIC
+UrlSuffix(gcc/Code-Gen-Options.html#index-fPIC)
+
+fPIE
+UrlSuffix(gcc/Code-Gen-Options.html#index-fPIE)
+
+fpic
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpic)
+
+fpie
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpie)
+
+fplt
+UrlSuffix(gcc/Code-Gen-Options.html#index-fno-plt)
+
+fplugin=
+UrlSuffix(gcc/Overall-Options.html#index-fplugin)
+
+fpredictive-commoning
+UrlSuffix(gcc/Optimize-Options.html#index-fpredictive-commoning)
+
+fprefetch-loop-arrays
+UrlSuffix(gcc/Optimize-Options.html#index-fprefetch-loop-arrays)
+
+fprofile-abs-path
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-abs-path)
+
+; skipping UrlSuffix for 'fprofile-arcs' due to multiple URLs:
+; duplicate: 'gcc/Instrumentation-Options.html#index-fprofile-arcs'
+; duplicate: 'gcc/Other-Builtins.html#index-fprofile-arcs-1'
+
+fprofile-dir=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-dir)
+
+fprofile-note=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-note)
+
+fprofile-correction
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-correction)
+
+fprofile-update=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-update)
+
+fprofile-filter-files=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-filter-files)
+
+fprofile-exclude-files=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-exclude-files)
+
+fprofile-reproducible=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-reproducible)
+
+fprofile-prefix-path=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-prefix-path)
+
+fprofile-prefix-map=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-prefix-map)
+
+fprofile-generate
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-generate)
+
+fprofile-generate=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-generate)
+
+fprofile-info-section
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-info-section)
+
+fprofile-info-section=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-info-section)
+
+fprofile-partial-training
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-partial-training)
+
+fprofile-use
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-use)
+
+fprofile-use=
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-use)
+
+fprofile-values
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-values)
+
+fprofile-report
+UrlSuffix(gcc/Developer-Options.html#index-fprofile-report)
+
+fprofile-reorder-functions
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-reorder-functions)
+
+fpatchable-function-entry=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fpatchable-function-entry)
+
+frandom-seed
+UrlSuffix(gcc/Developer-Options.html#index-frandom-seed)
+
+frandom-seed=
+UrlSuffix(gcc/Developer-Options.html#index-frandom-seed)
+
+frecord-gcc-switches
+UrlSuffix(gcc/Code-Gen-Options.html#index-frecord-gcc-switches)
+
+freg-struct-return
+UrlSuffix(gcc/Code-Gen-Options.html#index-freg-struct-return)
+
+flifetime-dse
+UrlSuffix(gcc/Optimize-Options.html#index-flifetime-dse)
+
+flifetime-dse=
+UrlSuffix(gcc/Optimize-Options.html#index-flifetime-dse)
+
+flive-patching
+UrlSuffix(gcc/Optimize-Options.html#index-flive-patching)
+
+flive-patching=
+UrlSuffix(gcc/Optimize-Options.html#index-flive-patching)
+
+fallocation-dce
+UrlSuffix(gcc/Optimize-Options.html#index-fno-allocation-dce)
+
+flive-range-shrinkage
+UrlSuffix(gcc/Optimize-Options.html#index-flive-range-shrinkage)
+
+frename-registers
+UrlSuffix(gcc/Optimize-Options.html#index-frename-registers)
+
+fschedule-fusion
+UrlSuffix(gcc/Optimize-Options.html#index-fschedule-fusion)
+
+freorder-blocks
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-blocks)
+
+freorder-blocks-algorithm=
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-blocks-algorithm)
+
+freorder-blocks-and-partition
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-blocks-and-partition)
+
+freorder-functions
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-functions)
+
+frerun-cse-after-loop
+UrlSuffix(gcc/Optimize-Options.html#index-frerun-cse-after-loop)
+
+frounding-math
+UrlSuffix(gcc/Optimize-Options.html#index-frounding-math)
+
+fsched-interblock
+UrlSuffix(gcc/Optimize-Options.html#index-fno-sched-interblock)
+
+fsched-pressure
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-pressure)
+
+fsched-spec
+UrlSuffix(gcc/Optimize-Options.html#index-fno-sched-spec)
+
+fsched-spec-load
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-spec-load)
+
+fsched-spec-load-dangerous
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-spec-load-dangerous)
+
+fsched-verbose=
+UrlSuffix(gcc/Developer-Options.html#index-fsched-verbose)
+
+fsched2-use-superblocks
+UrlSuffix(gcc/Optimize-Options.html#index-fsched2-use-superblocks)
+
+fschedule-insns
+UrlSuffix(gcc/Optimize-Options.html#index-fschedule-insns)
+
+fschedule-insns2
+UrlSuffix(gcc/Optimize-Options.html#index-fschedule-insns2)
+
+fselective-scheduling
+UrlSuffix(gcc/Optimize-Options.html#index-fselective-scheduling)
+
+fselective-scheduling2
+UrlSuffix(gcc/Optimize-Options.html#index-fselective-scheduling2)
+
+fsel-sched-pipelining
+UrlSuffix(gcc/Optimize-Options.html#index-fsel-sched-pipelining)
+
+fsel-sched-pipelining-outer-loops
+UrlSuffix(gcc/Optimize-Options.html#index-fsel-sched-pipelining-outer-loops)
+
+fsemantic-interposition
+UrlSuffix(gcc/Optimize-Options.html#index-fsemantic-interposition)
+
+fsched-stalled-insns
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns)
+
+fsched-stalled-insns=
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns)
+
+fsched-stalled-insns-dep
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns-dep)
+
+fsched-stalled-insns-dep=
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns-dep)
+
+fsched-group-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-group-heuristic)
+
+fsched-critical-path-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-critical-path-heuristic)
+
+fsched-spec-insn-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-spec-insn-heuristic)
+
+fsched-rank-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-rank-heuristic)
+
+fsched-last-insn-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-last-insn-heuristic)
+
+fsched-dep-count-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-dep-count-heuristic)
+
+fsection-anchors
+UrlSuffix(gcc/Optimize-Options.html#index-fsection-anchors)
+
+free
+UrlSuffix(gcc/Optimize-Options.html#index-free-1)
+
+fshow-column
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fno-show-column)
+
+fshrink-wrap
+UrlSuffix(gcc/Optimize-Options.html#index-fshrink-wrap)
+
+fshrink-wrap-separate
+UrlSuffix(gcc/Optimize-Options.html#index-fshrink-wrap-separate)
+
+fsignaling-nans
+UrlSuffix(gcc/Optimize-Options.html#index-fsignaling-nans)
+
+fsigned-zeros
+UrlSuffix(gcc/Optimize-Options.html#index-fno-signed-zeros)
+
+fsingle-precision-constant
+UrlSuffix(gcc/Optimize-Options.html#index-fsingle-precision-constant)
+
+fsplit-ivs-in-unroller
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-ivs-in-unroller)
+
+fsplit-stack
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsplit-stack)
+
+fsplit-wide-types
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-wide-types)
+
+fsplit-wide-types-early
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-wide-types-early)
+
+fssa-backprop
+UrlSuffix(gcc/Optimize-Options.html#index-fssa-backprop)
+
+fssa-phiopt
+UrlSuffix(gcc/Optimize-Options.html#index-fssa-phiopt)
+
+fstdarg-opt
+UrlSuffix(gcc/Optimize-Options.html#index-fstdarg-opt)
+
+fvariable-expansion-in-unroller
+UrlSuffix(gcc/Optimize-Options.html#index-fvariable-expansion-in-unroller)
+
+fstack-check=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-check)
+
+fstack-check
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-check)
+
+fstack-clash-protection
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-clash-protection)
+
+fstack-limit
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-stack-limit)
+
+fstack-limit-register=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-limit-register)
+
+fstack-limit-symbol=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-limit-symbol)
+
+fstack-protector
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector)
+
+fstack-protector-all
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector-all)
+
+fstack-protector-strong
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector-strong)
+
+fstack-protector-explicit
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector-explicit)
+
+fstack-usage
+UrlSuffix(gcc/Developer-Options.html#index-fstack-usage)
+
+fstrict-aliasing
+UrlSuffix(gcc/Optimize-Options.html#index-fstrict-aliasing)
+
+fstrict-overflow
+UrlSuffix(gcc/Code-Gen-Options.html#index-fstrict-overflow)
+
+fstrub=strict
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstrub_003dstrict)
+
+fstrub=relaxed
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstrub_003drelaxed)
+
+fstrub=all
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstrub_003dall)
+
+fstrub=at-calls
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstrub_003dat-calls)
+
+fstrub=internal
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstrub_003dinternal)
+
+fsync-libcalls
+UrlSuffix(gcc/Code-Gen-Options.html#index-fsync-libcalls)
+
+fsyntax-only
+UrlSuffix(gcc/Warning-Options.html#index-fsyntax-only) LangUrlSuffix_D(gdc/Warnings.html#index-fno-syntax-only)
+
+ftest-coverage
+UrlSuffix(gcc/Instrumentation-Options.html#index-ftest-coverage)
+
+fthread-jumps
+UrlSuffix(gcc/Optimize-Options.html#index-fthread-jumps)
+
+ftime-report
+UrlSuffix(gcc/Developer-Options.html#index-ftime-report)
+
+ftime-report-details
+UrlSuffix(gcc/Developer-Options.html#index-ftime-report-details)
+
+ftls-model=
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftls-model)
+
+ftoplevel-reorder
+UrlSuffix(gcc/Optimize-Options.html#index-fno-toplevel-reorder)
+
+ftracer
+UrlSuffix(gcc/Optimize-Options.html#index-ftracer)
+
+ftrampolines
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftrampolines)
+
+ftrampoline-impl=
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftrampoline-impl)
+
+ftrapping-math
+UrlSuffix(gcc/Optimize-Options.html#index-fno-trapping-math)
+
+ftrapv
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftrapv)
+
+ftree-ccp
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-ccp)
+
+ftree-bit-ccp
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-bit-ccp)
+
+ftree-ch
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-ch)
+
+ftree-coalesce-vars
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-coalesce-vars)
+
+ftree-copy-prop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-copy-prop)
+
+ftree-switch-conversion
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-switch-conversion)
+
+ftree-dce
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-dce)
+
+ftree-dominator-opts
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-dominator-opts)
+
+ftree-tail-merge
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-tail-merge)
+
+ftree-dse
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-dse)
+
+ftree-forwprop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-forwprop)
+
+ftree-fre
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-fre)
+
+foptimize-strlen
+UrlSuffix(gcc/Optimize-Options.html#index-foptimize-strlen)
+
+fisolate-erroneous-paths-dereference
+UrlSuffix(gcc/Optimize-Options.html#index-fisolate-erroneous-paths-dereference)
+
+fisolate-erroneous-paths-attribute
+UrlSuffix(gcc/Optimize-Options.html#index-fisolate-erroneous-paths-attribute)
+
+ftree-loop-distribution
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-distribution)
+
+ftree-loop-distribute-patterns
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-distribute-patterns)
+
+ftree-loop-im
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-im)
+
+ftree-loop-linear
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-linear)
+
+ftree-loop-ivcanon
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-ivcanon)
+
+ftree-loop-optimize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-optimize)
+
+ftree-parallelize-loops=
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-parallelize-loops)
+
+ftree-phiprop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-phiprop)
+
+ftree-pre
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-pre)
+
+ftree-partial-pre
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-partial-pre)
+
+ftree-pta
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-pta)
+
+ftree-reassoc
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-reassoc)
+
+ftree-sink
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-sink)
+
+ftree-slsr
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-slsr)
+
+ftree-sra
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-sra)
+
+ftree-ter
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-ter)
+
+ftree-vrp
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-vrp)
+
+fsplit-paths
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-paths)
+
+funconstrained-commons
+UrlSuffix(gcc/Optimize-Options.html#index-funconstrained-commons)
+
+funit-at-a-time
+UrlSuffix(gcc/Optimize-Options.html#index-funit-at-a-time)
+
+funreachable-traps
+UrlSuffix(gcc/Optimize-Options.html#index-funreachable-traps)
+
+funroll-loops
+UrlSuffix(gcc/Optimize-Options.html#index-funroll-loops)
+
+funroll-all-loops
+UrlSuffix(gcc/Optimize-Options.html#index-funroll-all-loops)
+
+fassociative-math
+UrlSuffix(gcc/Optimize-Options.html#index-fassociative-math)
+
+freciprocal-math
+UrlSuffix(gcc/Optimize-Options.html#index-freciprocal-math)
+
+funsafe-math-optimizations
+UrlSuffix(gcc/Optimize-Options.html#index-funsafe-math-optimizations)
+
+funswitch-loops
+UrlSuffix(gcc/Optimize-Options.html#index-funswitch-loops)
+
+fsplit-loops
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-loops)
+
+fversion-loops-for-strides
+UrlSuffix(gcc/Optimize-Options.html#index-fversion-loops-for-strides)
+
+funwind-tables
+UrlSuffix(gcc/Code-Gen-Options.html#index-funwind-tables)
+
+fuse-ld=bfd
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dbfd)
+
+fuse-ld=gold
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dgold)
+
+fuse-ld=lld
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dlld)
+
+fuse-ld=mold
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dmold)
+
+fuse-linker-plugin
+UrlSuffix(gcc/Optimize-Options.html#index-fuse-linker-plugin)
+
+fvar-tracking
+UrlSuffix(gcc/Debugging-Options.html#index-fvar-tracking)
+
+fvar-tracking-assignments
+UrlSuffix(gcc/Debugging-Options.html#index-fno-var-tracking-assignments)
+
+fvar-tracking-assignments-toggle
+UrlSuffix(gcc/Developer-Options.html#index-fno-var-tracking-assignments-toggle)
+
+ftree-vectorize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-vectorize)
+
+ftree-loop-vectorize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-vectorize)
+
+ftree-slp-vectorize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-slp-vectorize)
+
+fvect-cost-model=
+UrlSuffix(gcc/Optimize-Options.html#index-fvect-cost-model)
+
+fsimd-cost-model=
+UrlSuffix(gcc/Optimize-Options.html#index-fsimd-cost-model)
+
+fvect-cost-model
+UrlSuffix(gcc/Optimize-Options.html#index-fvect-cost-model)
+
+ftree-scev-cprop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-scev-cprop)
+
+ftrivial-auto-var-init=
+UrlSuffix(gcc/Optimize-Options.html#index-ftrivial-auto-var-init)
+
+fverbose-asm
+UrlSuffix(gcc/Code-Gen-Options.html#index-fverbose-asm)
+
+fvisibility=
+UrlSuffix(gcc/Code-Gen-Options.html#index-fvisibility)
+
+fvtable-verify=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fvtable-verify)
+
+fvtv-counts
+UrlSuffix(gcc/Instrumentation-Options.html#index-fvtv-counts)
+
+fvtv-debug
+UrlSuffix(gcc/Instrumentation-Options.html#index-fvtv-debug)
+
+fvpt
+UrlSuffix(gcc/Optimize-Options.html#index-fvpt)
+
+fweb
+UrlSuffix(gcc/Optimize-Options.html#index-fweb)
+
+ftree-builtin-call-dce
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-builtin-call-dce)
+
+fwhole-program
+UrlSuffix(gcc/Optimize-Options.html#index-fwhole-program)
+
+fwrapv-pointer
+UrlSuffix(gcc/Code-Gen-Options.html#index-fwrapv-pointer)
+
+fwrapv
+UrlSuffix(gcc/Code-Gen-Options.html#index-fwrapv)
+
+fzero-initialized-in-bss
+UrlSuffix(gcc/Optimize-Options.html#index-fno-zero-initialized-in-bss)
+
+fzero-call-used-regs=
+UrlSuffix(gcc/Optimize-Options.html#index-fzero-call-used-regs)
+
+g
+UrlSuffix(gcc/Debugging-Options.html#index-g)
+
+gas-loc-support
+UrlSuffix(gcc/Debugging-Options.html#index-gas-loc-support)
+
+gas-locview-support
+UrlSuffix(gcc/Debugging-Options.html#index-gas-locview-support)
+
+gcodeview
+UrlSuffix(gcc/Debugging-Options.html#index-gcodeview)
+
+gcolumn-info
+UrlSuffix(gcc/Debugging-Options.html#index-gcolumn-info)
+
+gctf
+UrlSuffix(gcc/Debugging-Options.html#index-gctf)
+
+gbtf
+UrlSuffix(gcc/Debugging-Options.html#index-gbtf)
+
+gdwarf
+UrlSuffix(gcc/Debugging-Options.html#index-gdwarf)
+
+gdwarf32
+UrlSuffix(gcc/Debugging-Options.html#index-gdwarf32)
+
+gdwarf64
+UrlSuffix(gcc/Debugging-Options.html#index-gdwarf64)
+
+ggdb
+UrlSuffix(gcc/Debugging-Options.html#index-ggdb)
+
+ginline-points
+UrlSuffix(gcc/Debugging-Options.html#index-ginline-points)
+
+ginternal-reset-location-views
+UrlSuffix(gcc/Debugging-Options.html#index-ginternal-reset-location-views)
+
+gpubnames
+UrlSuffix(gcc/Debugging-Options.html#index-gpubnames)
+
+ggnu-pubnames
+UrlSuffix(gcc/Debugging-Options.html#index-ggnu-pubnames)
+
+grecord-gcc-switches
+UrlSuffix(gcc/Debugging-Options.html#index-grecord-gcc-switches)
+
+gsplit-dwarf
+UrlSuffix(gcc/Debugging-Options.html#index-gsplit-dwarf)
+
+gstatement-frontiers
+UrlSuffix(gcc/Debugging-Options.html#index-gstatement-frontiers)
+
+gstrict-dwarf
+UrlSuffix(gcc/Debugging-Options.html#index-gstrict-dwarf)
+
+gdescribe-dies
+UrlSuffix(gcc/Debugging-Options.html#index-gdescribe-dies)
+
+gtoggle
+UrlSuffix(gcc/Developer-Options.html#index-gtoggle)
+
+gvariable-location-views
+UrlSuffix(gcc/Debugging-Options.html#index-gvariable-location-views)
+
+gvariable-location-views=incompat5
+UrlSuffix(gcc/Debugging-Options.html#index-gvariable-location-views_003dincompat5)
+
+gvms
+UrlSuffix(gcc/Debugging-Options.html#index-gvms)
+
+gz
+UrlSuffix(gcc/Debugging-Options.html#index-gz)
+
+gz=
+UrlSuffix(gcc/Debugging-Options.html#index-gz)
+
+iplugindir=
+UrlSuffix(gcc/Directory-Options.html#index-iplugindir_003d)
+
+l
+UrlSuffix(gcc/Link-Options.html#index-l)
+
+no-canonical-prefixes
+UrlSuffix(gcc/Directory-Options.html#index-no-canonical-prefixes)
+
+nodefaultlibs
+UrlSuffix(gcc/Link-Options.html#index-nodefaultlibs)
+
+nostartfiles
+UrlSuffix(gcc/Link-Options.html#index-nostartfiles)
+
+nolibc
+UrlSuffix(gcc/Link-Options.html#index-nolibc)
+
+nostdlib
+UrlSuffix(gcc/Link-Options.html#index-nostdlib)
+
+nostdlib++
+UrlSuffix(gcc/Link-Options.html#index-nostdlib_002b_002b)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
+p
+UrlSuffix(gcc/Instrumentation-Options.html#index-p)
+
+pass-exit-codes
+UrlSuffix(gcc/Overall-Options.html#index-pass-exit-codes)
+
+; skipping UrlSuffix for 'pedantic' due to multiple URLs:
+; duplicate: 'gcc/Alternate-Keywords.html#index-pedantic-3'
+; duplicate: 'gcc/C-Extensions.html#index-pedantic-2'
+; duplicate: 'gcc/Standards.html#index-pedantic'
+; duplicate: 'gcc/Warning-Options.html#index-pedantic-1'
+; duplicate: 'gcc/Warnings-and-Errors.html#index-pedantic-4'
+
+; skipping UrlSuffix for 'pedantic-errors' due to multiple URLs:
+; duplicate: 'gcc/Non-bugs.html#index-pedantic-errors-2'
+; duplicate: 'gcc/Standards.html#index-pedantic-errors'
+; duplicate: 'gcc/Warning-Options.html#index-pedantic-errors-1'
+; duplicate: 'gcc/Warnings-and-Errors.html#index-pedantic-errors-3'
+
+pg
+UrlSuffix(gcc/Instrumentation-Options.html#index-pg)
+
+pipe
+UrlSuffix(gcc/Overall-Options.html#index-pipe)
+
+print-file-name=
+UrlSuffix(gcc/Developer-Options.html#index-print-file-name)
+
+print-libgcc-file-name
+UrlSuffix(gcc/Developer-Options.html#index-print-libgcc-file-name)
+
+print-multi-directory
+UrlSuffix(gcc/Developer-Options.html#index-print-multi-directory)
+
+print-multi-lib
+UrlSuffix(gcc/Developer-Options.html#index-print-multi-lib)
+
+print-multi-os-directory
+UrlSuffix(gcc/Developer-Options.html#index-print-multi-os-directory)
+
+print-multiarch
+UrlSuffix(gcc/Developer-Options.html#index-print-multiarch)
+
+print-prog-name=
+UrlSuffix(gcc/Developer-Options.html#index-print-prog-name)
+
+print-search-dirs
+UrlSuffix(gcc/Developer-Options.html#index-print-search-dirs)
+
+print-sysroot
+UrlSuffix(gcc/Developer-Options.html#index-print-sysroot)
+
+print-sysroot-headers-suffix
+UrlSuffix(gcc/Developer-Options.html#index-print-sysroot-headers-suffix)
+
+r
+UrlSuffix(gcc/Link-Options.html#index-r)
+
+s
+UrlSuffix(gcc/Link-Options.html#index-s)
+
+save-temps
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+save-temps=
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+time
+UrlSuffix(gcc/Developer-Options.html#index-time)
+
+time=
+UrlSuffix(gcc/Developer-Options.html#index-time)
+
+u
+UrlSuffix(gcc/Link-Options.html#index-u)
+
+undef
+UrlSuffix(gcc/Preprocessor-Options.html#index-undef)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v) LangUrlSuffix_D(gdc/Developer-Options.html#index-v)
+
+version
+UrlSuffix(gcc/Overall-Options.html#index-version)
+
+w
+UrlSuffix(gcc/Warning-Options.html#index-w)
+
+wrapper
+UrlSuffix(gcc/Overall-Options.html#index-wrapper)
+
+x
+UrlSuffix(gcc/Overall-Options.html#index-x)
+
+shared
+UrlSuffix(gcc/Link-Options.html#index-shared)
+
+shared-libgcc
+UrlSuffix(gcc/Link-Options.html#index-shared-libgcc)
+
+specs
+UrlSuffix(gcc/Overall-Options.html#index-specs)
+
+specs=
+UrlSuffix(gcc/Overall-Options.html#index-specs)
+
+; skipping UrlSuffix for 'static' due to multiple URLs:
+; duplicate: 'gcc/Darwin-Options.html#index-static-1'
+; duplicate: 'gcc/Link-Options.html#index-static'
+
+static-libgcc
+UrlSuffix(gcc/Link-Options.html#index-static-libgcc)
+
+static-libphobos
+LangUrlSuffix_D(gdc/Linking.html#index-static-libphobos)
+
+static-libstdc++
+UrlSuffix(gcc/Link-Options.html#index-static-libstdc_002b_002b)
+
+static-libasan
+UrlSuffix(gcc/Link-Options.html#index-static-libasan)
+
+static-libtsan
+UrlSuffix(gcc/Link-Options.html#index-static-libtsan)
+
+static-liblsan
+UrlSuffix(gcc/Link-Options.html#index-static-liblsan)
+
+static-libubsan
+UrlSuffix(gcc/Link-Options.html#index-static-libubsan)
+
+symbolic
+UrlSuffix(gcc/Link-Options.html#index-symbolic)
+
+no-pie
+UrlSuffix(gcc/Link-Options.html#index-no-pie)
+
+pie
+UrlSuffix(gcc/Link-Options.html#index-pie)
+
+static-pie
+UrlSuffix(gcc/Link-Options.html#index-static-pie)
+
+z
+UrlSuffix(gcc/Link-Options.html#index-z)
+
+fipa-ra
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-ra)
+
diff --git a/gcc/config/aarch64/aarch64.opt.urls b/gcc/config/aarch64/aarch64.opt.urls
new file mode 100644
index 0000000..993634c
--- /dev/null
+++ b/gcc/config/aarch64/aarch64.opt.urls
@@ -0,0 +1,93 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/aarch64/aarch64.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/AArch64-Options.html#index-mbig-endian)
+
+mgeneral-regs-only
+UrlSuffix(gcc/AArch64-Options.html#index-mgeneral-regs-only)
+
+mharden-sls=
+UrlSuffix(gcc/AArch64-Options.html#index-mharden-sls)
+
+mfix-cortex-a53-835769
+UrlSuffix(gcc/AArch64-Options.html#index-mfix-cortex-a53-835769)
+
+mfix-cortex-a53-843419
+UrlSuffix(gcc/AArch64-Options.html#index-mfix-cortex-a53-843419)
+
+mlittle-endian
+UrlSuffix(gcc/AArch64-Options.html#index-mlittle-endian)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mtp=
+UrlSuffix(gcc/AArch64-Options.html#index-mtp)
+
+mstrict-align
+UrlSuffix(gcc/AArch64-Options.html#index-mstrict-align)
+
+momit-leaf-frame-pointer
+UrlSuffix(gcc/AArch64-Options.html#index-momit-leaf-frame-pointer)
+
+; skipping UrlSuffix for 'mtls-dialect=' due to finding no URLs
+
+mtls-size=
+UrlSuffix(gcc/AArch64-Options.html#index-mtls-size)
+
+march=
+UrlSuffix(gcc/AArch64-Options.html#index-march)
+
+mcpu=
+UrlSuffix(gcc/AArch64-Options.html#index-mcpu)
+
+mtune=
+UrlSuffix(gcc/AArch64-Options.html#index-mtune)
+
+mabi=
+UrlSuffix(gcc/AArch64-Options.html#index-mabi)
+
+moverride=
+UrlSuffix(gcc/AArch64-Options.html#index-moverride)
+
+mpc-relative-literal-loads
+UrlSuffix(gcc/AArch64-Options.html#index-mpc-relative-literal-loads)
+
+mbranch-protection=
+UrlSuffix(gcc/AArch64-Options.html#index-mbranch-protection)
+
+msign-return-address=
+UrlSuffix(gcc/AArch64-Options.html#index-msign-return-address)
+
+mlow-precision-recip-sqrt
+UrlSuffix(gcc/AArch64-Options.html#index-mlow-precision-recip-sqrt)
+
+mlow-precision-sqrt
+UrlSuffix(gcc/AArch64-Options.html#index-mlow-precision-sqrt)
+
+mlow-precision-div
+UrlSuffix(gcc/AArch64-Options.html#index-mlow-precision-div)
+
+mearly-ra=
+UrlSuffix(gcc/AArch64-Options.html#index-mearly-ra)
+
+msve-vector-bits=
+UrlSuffix(gcc/AArch64-Options.html#index-msve-vector-bits)
+
+mverbose-cost-dump
+UrlSuffix(gcc/AArch64-Options.html#index-mverbose-cost-dump)
+
+mearly-ldp-fusion
+UrlSuffix(gcc/AArch64-Options.html#index-mearly-ldp-fusion)
+
+mlate-ldp-fusion
+UrlSuffix(gcc/AArch64-Options.html#index-mlate-ldp-fusion)
+
+mstack-protector-guard=
+UrlSuffix(gcc/AArch64-Options.html#index-mstack-protector-guard)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/AArch64-Options.html#index-mstack-protector-guard-reg)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/AArch64-Options.html#index-mstack-protector-guard-offset)
+
diff --git a/gcc/config/alpha/alpha.opt.urls b/gcc/config/alpha/alpha.opt.urls
new file mode 100644
index 0000000..a55c083
--- /dev/null
+++ b/gcc/config/alpha/alpha.opt.urls
@@ -0,0 +1,76 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/alpha/alpha.opt and generated HTML
+
+msoft-float
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-msoft-float-2)
+
+; skipping UrlSuffix for 'mgas' due to finding no URLs
+
+mieee-conformant
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mieee-conformant)
+
+mieee
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mieee)
+
+mieee-with-inexact
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mieee-with-inexact)
+
+mbuild-constants
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mbuild-constants)
+
+mfloat-vax
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfloat-vax)
+
+mfloat-ieee
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfloat-ieee)
+
+mbwx
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mbwx)
+
+mmax
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mmax)
+
+mfix
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfix)
+
+mcix
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mcix)
+
+mexplicit-relocs
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mexplicit-relocs)
+
+msmall-data
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-msmall-data)
+
+mlarge-data
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mlarge-data)
+
+msmall-text
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-msmall-text)
+
+mlarge-text
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mlarge-text)
+
+; skipping UrlSuffix for 'mlong-double-128' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-double-64' due to finding no URLs
+
+mcpu=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mcpu-4)
+
+mtune=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mtune-6)
+
+mfp-rounding-mode=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfp-rounding-mode)
+
+mfp-trap-mode=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfp-trap-mode)
+
+mtrap-precision=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mtrap-precision)
+
+mmemory-latency=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mmemory-latency)
+
+; skipping UrlSuffix for 'mtls-size=' due to finding no URLs
+
diff --git a/gcc/config/alpha/elf.opt.urls b/gcc/config/alpha/elf.opt.urls
new file mode 100644
index 0000000..d97d0fe
--- /dev/null
+++ b/gcc/config/alpha/elf.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/alpha/elf.opt and generated HTML
+
diff --git a/gcc/config/arc/arc-tables.opt.urls b/gcc/config/arc/arc-tables.opt.urls
new file mode 100644
index 0000000..1e177e8
--- /dev/null
+++ b/gcc/config/arc/arc-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arc/arc-tables.opt and generated HTML
+
diff --git a/gcc/config/arc/arc.opt.urls b/gcc/config/arc/arc.opt.urls
new file mode 100644
index 0000000..bb9a8eb
--- /dev/null
+++ b/gcc/config/arc/arc.opt.urls
@@ -0,0 +1,260 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arc/arc.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/ARC-Options.html#index-mbig-endian-1)
+
+mlittle-endian
+UrlSuffix(gcc/ARC-Options.html#index-mlittle-endian-1)
+
+mno-cond-exec
+UrlSuffix(gcc/ARC-Options.html#index-mno-cond-exec)
+
+mA6
+UrlSuffix(gcc/ARC-Options.html#index-mA6)
+
+mARC600
+UrlSuffix(gcc/ARC-Options.html#index-mARC600)
+
+mARC601
+UrlSuffix(gcc/ARC-Options.html#index-mARC601)
+
+mA7
+UrlSuffix(gcc/ARC-Options.html#index-mA7)
+
+mARC700
+UrlSuffix(gcc/ARC-Options.html#index-mARC700)
+
+mjli-always
+UrlSuffix(gcc/ARC-Options.html#index-mjli-always)
+
+mmpy-option=
+UrlSuffix(gcc/ARC-Options.html#index-mmpy-option)
+
+mdiv-rem
+UrlSuffix(gcc/ARC-Options.html#index-mdiv-rem)
+
+mcode-density
+UrlSuffix(gcc/ARC-Options.html#index-mcode-density)
+
+mmixed-code
+UrlSuffix(gcc/ARC-Options.html#index-mmixed-code)
+
+mvolatile-cache
+UrlSuffix(gcc/ARC-Options.html#index-mvolatile-cache)
+
+mno-volatile-cache
+UrlSuffix(gcc/ARC-Options.html#index-mno-volatile-cache)
+
+mbarrel-shifter
+UrlSuffix(gcc/ARC-Options.html#index-mbarrel-shifter)
+
+mnorm
+UrlSuffix(gcc/ARC-Options.html#index-mnorm)
+
+mswap
+UrlSuffix(gcc/ARC-Options.html#index-mswap)
+
+mmul64
+UrlSuffix(gcc/ARC-Options.html#index-mmul64)
+
+mno-mpy
+UrlSuffix(gcc/ARC-Options.html#index-mno-mpy)
+
+mea
+UrlSuffix(gcc/ARC-Options.html#index-mea)
+
+msoft-float
+UrlSuffix(gcc/ARC-Options.html#index-msoft-float)
+
+mlong-calls
+UrlSuffix(gcc/ARC-Options.html#index-mlong-calls-1)
+
+mno-brcc
+UrlSuffix(gcc/ARC-Options.html#index-mno-brcc)
+
+msdata
+UrlSuffix(gcc/ARC-Options.html#index-msdata)
+
+mmillicode
+UrlSuffix(gcc/ARC-Options.html#index-mmillicode)
+
+mspfp
+UrlSuffix(gcc/ARC-Options.html#index-mspfp)
+
+mspfp-compact
+UrlSuffix(gcc/ARC-Options.html#index-mspfp-compact)
+
+mspfp-fast
+UrlSuffix(gcc/ARC-Options.html#index-mspfp-fast)
+
+margonaut
+UrlSuffix(gcc/ARC-Options.html#index-margonaut)
+
+mdpfp
+UrlSuffix(gcc/ARC-Options.html#index-mdpfp)
+
+mdpfp-compact
+UrlSuffix(gcc/ARC-Options.html#index-mdpfp-compact)
+
+mdpfp-fast
+UrlSuffix(gcc/ARC-Options.html#index-mdpfp-fast)
+
+mno-dpfp-lrsr
+UrlSuffix(gcc/ARC-Options.html#index-mno-dpfp-lrsr)
+
+msimd
+UrlSuffix(gcc/ARC-Options.html#index-msimd)
+
+mcpu=
+UrlSuffix(gcc/ARC-Options.html#index-mcpu-1)
+
+msize-level=
+UrlSuffix(gcc/ARC-Options.html#index-msize-level)
+
+misize
+UrlSuffix(gcc/ARC-Options.html#index-misize)
+
+mmultcost=
+UrlSuffix(gcc/ARC-Options.html#index-mmultcost)
+
+mtune=
+UrlSuffix(gcc/ARC-Options.html#index-mtune-2)
+
+mindexed-loads
+UrlSuffix(gcc/ARC-Options.html#index-mindexed-loads)
+
+mauto-modify-reg
+UrlSuffix(gcc/ARC-Options.html#index-mauto-modify-reg)
+
+mmul32x16
+UrlSuffix(gcc/ARC-Options.html#index-mmul32x16)
+
+munalign-prob-threshold=
+UrlSuffix(gcc/ARC-Options.html#index-munalign-prob-threshold)
+
+mmedium-calls
+UrlSuffix(gcc/ARC-Options.html#index-mmedium-calls)
+
+mannotate-align
+UrlSuffix(gcc/ARC-Options.html#index-mannotate-align)
+
+malign-call
+UrlSuffix(gcc/ARC-Options.html#index-malign-call)
+
+mRcq
+UrlSuffix(gcc/ARC-Options.html#index-mRcq)
+
+mRcw
+UrlSuffix(gcc/ARC-Options.html#index-mRcw)
+
+mearly-cbranchsi
+UrlSuffix(gcc/ARC-Options.html#index-mearly-cbranchsi)
+
+mbbit-peephole
+UrlSuffix(gcc/ARC-Options.html#index-mbbit-peephole)
+
+mcase-vector-pcrel
+UrlSuffix(gcc/ARC-Options.html#index-mcase-vector-pcrel)
+
+mcompact-casesi
+UrlSuffix(gcc/ARC-Options.html#index-mcompact-casesi)
+
+mq-class
+UrlSuffix(gcc/ARC-Options.html#index-mq-class)
+
+mexpand-adddi
+UrlSuffix(gcc/ARC-Options.html#index-mexpand-adddi)
+
+; skipping UrlSuffix for 'mcrc' due to finding no URLs
+
+mdsp-packa
+UrlSuffix(gcc/ARC-Options.html#index-mdsp-packa)
+
+mdvbf
+UrlSuffix(gcc/ARC-Options.html#index-mdvbf)
+
+mmac-d16
+UrlSuffix(gcc/ARC-Options.html#index-mmac-d16)
+
+mmac-24
+UrlSuffix(gcc/ARC-Options.html#index-mmac-24)
+
+mtelephony
+UrlSuffix(gcc/ARC-Options.html#index-mtelephony)
+
+mxy
+UrlSuffix(gcc/ARC-Options.html#index-mxy)
+
+mlock
+UrlSuffix(gcc/ARC-Options.html#index-mlock)
+
+mswape
+UrlSuffix(gcc/ARC-Options.html#index-mswape)
+
+mrtsc
+UrlSuffix(gcc/ARC-Options.html#index-mrtsc)
+
+EB
+UrlSuffix(gcc/ARC-Options.html#index-EB)
+
+EL
+UrlSuffix(gcc/ARC-Options.html#index-EL)
+
+marclinux
+UrlSuffix(gcc/ARC-Options.html#index-marclinux)
+
+marclinux_prof
+UrlSuffix(gcc/ARC-Options.html#index-marclinux_005fprof)
+
+mlra
+UrlSuffix(gcc/ARC-Options.html#index-mlra)
+
+mlra-priority-none
+UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-none)
+
+mlra-priority-compact
+UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-compact)
+
+mlra-priority-noncompact
+UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-noncompact)
+
+mEA
+UrlSuffix(gcc/ARC-Options.html#index-mEA)
+
+multcost=
+UrlSuffix(gcc/ARC-Options.html#index-multcost)
+
+matomic
+UrlSuffix(gcc/ARC-Options.html#index-matomic)
+
+mll64
+UrlSuffix(gcc/ARC-Options.html#index-mll64)
+
+mfpu=
+UrlSuffix(gcc/ARC-Options.html#index-mfpu)
+
+mtp-regno=
+UrlSuffix(gcc/ARC-Options.html#index-mtp-regno)
+
+; skipping UrlSuffix for 'mbitops' due to finding no URLs
+
+; skipping UrlSuffix for 'munaligned-access' due to finding no URLs
+
+mirq-ctrl-saved=
+UrlSuffix(gcc/ARC-Options.html#index-mirq-ctrl-saved)
+
+mrgf-banked-regs=
+UrlSuffix(gcc/ARC-Options.html#index-mrgf-banked-regs)
+
+mlpc-width=
+UrlSuffix(gcc/ARC-Options.html#index-mlpc-width)
+
+mrf16
+UrlSuffix(gcc/ARC-Options.html#index-mrf16)
+
+mbranch-index
+UrlSuffix(gcc/ARC-Options.html#index-mbranch-index)
+
+mcode-density-frame
+UrlSuffix(gcc/ARC-Options.html#index-mcode-density-frame)
+
diff --git a/gcc/config/arm/arm-tables.opt.urls b/gcc/config/arm/arm-tables.opt.urls
new file mode 100644
index 0000000..f0a6f8e
--- /dev/null
+++ b/gcc/config/arm/arm-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arm/arm-tables.opt and generated HTML
+
diff --git a/gcc/config/arm/arm.opt.urls b/gcc/config/arm/arm.opt.urls
new file mode 100644
index 0000000..b3696f7
--- /dev/null
+++ b/gcc/config/arm/arm.opt.urls
@@ -0,0 +1,149 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arm/arm.opt and generated HTML
+
+mabi=
+UrlSuffix(gcc/ARM-Options.html#index-mabi-1)
+
+mabort-on-noreturn
+UrlSuffix(gcc/ARM-Options.html#index-mabort-on-noreturn)
+
+mapcs
+UrlSuffix(gcc/ARM-Options.html#index-mapcs)
+
+mapcs-frame
+UrlSuffix(gcc/ARM-Options.html#index-mapcs-frame)
+
+march=
+UrlSuffix(gcc/ARM-Options.html#index-march-2)
+
+marm
+UrlSuffix(gcc/ARM-Options.html#index-marm)
+
+mbig-endian
+UrlSuffix(gcc/ARM-Options.html#index-mbig-endian-2)
+
+mcallee-super-interworking
+UrlSuffix(gcc/ARM-Options.html#index-mcallee-super-interworking)
+
+mcaller-super-interworking
+UrlSuffix(gcc/ARM-Options.html#index-mcaller-super-interworking)
+
+mcpu=
+UrlSuffix(gcc/ARM-Options.html#index-mcpu-2)
+
+mfloat-abi=
+UrlSuffix(gcc/ARM-Options.html#index-mfloat-abi)
+
+mcmse
+UrlSuffix(gcc/ARM-Options.html#index-mcmse)
+
+mflip-thumb
+UrlSuffix(gcc/ARM-Options.html#index-mflip-thumb)
+
+mfp16-format=
+UrlSuffix(gcc/ARM-Options.html#index-mfp16-format)
+
+mfpu=
+UrlSuffix(gcc/ARM-Options.html#index-mfpu-1)
+
+; skipping UrlSuffix for 'mhard-float' due to finding no URLs
+
+mlittle-endian
+UrlSuffix(gcc/ARM-Options.html#index-mlittle-endian-2)
+
+mlong-calls
+UrlSuffix(gcc/ARM-Options.html#index-mlong-calls-2)
+
+mpic-data-is-text-relative
+UrlSuffix(gcc/ARM-Options.html#index-mpic-data-is-text-relative)
+
+mpic-register=
+UrlSuffix(gcc/ARM-Options.html#index-mpic-register)
+
+mpoke-function-name
+UrlSuffix(gcc/ARM-Options.html#index-mpoke-function-name)
+
+msched-prolog
+UrlSuffix(gcc/ARM-Options.html#index-msched-prolog)
+
+msingle-pic-base
+UrlSuffix(gcc/ARM-Options.html#index-msingle-pic-base)
+
+; skipping UrlSuffix for 'msoft-float' due to finding no URLs
+
+mstructure-size-boundary=
+UrlSuffix(gcc/ARM-Options.html#index-mstructure-size-boundary)
+
+mthumb
+UrlSuffix(gcc/ARM-Options.html#index-mthumb)
+
+mthumb-interwork
+UrlSuffix(gcc/ARM-Options.html#index-mthumb-interwork)
+
+mtls-dialect=
+UrlSuffix(gcc/ARM-Options.html#index-mtls-dialect)
+
+mtp=
+UrlSuffix(gcc/ARM-Options.html#index-mtp-1)
+
+mtpcs-frame
+UrlSuffix(gcc/ARM-Options.html#index-mtpcs-frame)
+
+mtpcs-leaf-frame
+UrlSuffix(gcc/ARM-Options.html#index-mtpcs-leaf-frame)
+
+mtune=
+UrlSuffix(gcc/ARM-Options.html#index-mtune-4)
+
+mprint-tune-info
+UrlSuffix(gcc/ARM-Options.html#index-mprint-tune-info)
+
+mverbose-cost-dump
+UrlSuffix(gcc/ARM-Options.html#index-mverbose-cost-dump-1)
+
+mword-relocations
+UrlSuffix(gcc/ARM-Options.html#index-mword-relocations)
+
+mrestrict-it
+UrlSuffix(gcc/ARM-Options.html#index-mrestrict-it)
+
+mfix-cortex-m3-ldrd
+UrlSuffix(gcc/ARM-Options.html#index-mfix-cortex-m3-ldrd)
+
+mfix-cmse-cve-2021-35465
+UrlSuffix(gcc/ARM-Options.html#index-mfix-cmse-cve-2021-35465)
+
+munaligned-access
+UrlSuffix(gcc/ARM-Options.html#index-munaligned-access)
+
+mneon-for-64bits
+UrlSuffix(gcc/ARM-Options.html#index-mneon-for-64bits)
+
+mslow-flash-data
+UrlSuffix(gcc/ARM-Options.html#index-mslow-flash-data)
+
+masm-syntax-unified
+UrlSuffix(gcc/ARM-Options.html#index-masm-syntax-unified)
+
+mpure-code
+UrlSuffix(gcc/ARM-Options.html#index-mpure-code)
+
+mbe8
+UrlSuffix(gcc/ARM-Options.html#index-mbe8)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+mbranch-protection=
+UrlSuffix(gcc/ARM-Options.html#index-mbranch-protection-1)
+
+mgeneral-regs-only
+UrlSuffix(gcc/ARM-Options.html#index-mgeneral-regs-only-1)
+
+mfdpic
+UrlSuffix(gcc/ARM-Options.html#index-mfdpic)
+
+mstack-protector-guard=
+UrlSuffix(gcc/ARM-Options.html#index-mstack-protector-guard-1)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/ARM-Options.html#index-mstack-protector-guard-offset-1)
+
diff --git a/gcc/config/arm/vxworks.opt.urls b/gcc/config/arm/vxworks.opt.urls
new file mode 100644
index 0000000..8fe7eec
--- /dev/null
+++ b/gcc/config/arm/vxworks.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arm/vxworks.opt and generated HTML
+
diff --git a/gcc/config/avr/avr.opt.urls b/gcc/config/avr/avr.opt.urls
new file mode 100644
index 0000000..7af6771
--- /dev/null
+++ b/gcc/config/avr/avr.opt.urls
@@ -0,0 +1,71 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/avr/avr.opt and generated HTML
+
+mcall-prologues
+UrlSuffix(gcc/AVR-Options.html#index-mcall-prologues)
+
+mmcu=
+UrlSuffix(gcc/AVR-Options.html#index-mmcu)
+
+mgas-isr-prologues
+UrlSuffix(gcc/AVR-Options.html#index-mgas-isr-prologues)
+
+mn-flash=
+UrlSuffix(gcc/AVR-Options.html#index-mn-flash)
+
+mrmw
+UrlSuffix(gcc/AVR-Options.html#index-mrmw)
+
+mshort-calls
+UrlSuffix(gcc/AVR-Options.html#index-mshort-calls)
+
+mint8
+UrlSuffix(gcc/AVR-Options.html#index-mint8)
+
+mno-interrupts
+UrlSuffix(gcc/AVR-Options.html#index-mno-interrupts)
+
+mbranch-cost=
+UrlSuffix(gcc/AVR-Options.html#index-mbranch-cost-1)
+
+mmain-is-OS_task
+UrlSuffix(gcc/AVR-Options.html#index-mmain-is-OS_005ftask)
+
+mtiny-stack
+UrlSuffix(gcc/AVR-Options.html#index-mtiny-stack)
+
+mrelax
+UrlSuffix(gcc/AVR-Options.html#index-mrelax)
+
+maccumulate-args
+UrlSuffix(gcc/AVR-Options.html#index-maccumulate-args)
+
+mstrict-X
+UrlSuffix(gcc/AVR-Options.html#index-mstrict-X)
+
+msp8
+UrlSuffix(gcc/AVR-Options.html#index-msp8)
+
+Waddr-space-convert
+UrlSuffix(gcc/AVR-Options.html#index-Waddr-space-convert)
+
+Wmisspelled-isr
+UrlSuffix(gcc/AVR-Options.html#index-Wmisspelled-isr)
+
+mfract-convert-truncate
+UrlSuffix(gcc/AVR-Options.html#index-mfract-convert-truncate)
+
+mabsdata
+UrlSuffix(gcc/AVR-Options.html#index-mabsdata)
+
+mdouble=
+UrlSuffix(gcc/AVR-Options.html#index-mdouble)
+
+mlong-double=
+UrlSuffix(gcc/AVR-Options.html#index-mlong-double)
+
+nodevicelib
+UrlSuffix(gcc/AVR-Options.html#index-nodevicelib)
+
+nodevicespecs
+UrlSuffix(gcc/AVR-Options.html#index-nodevicespecs)
+
diff --git a/gcc/config/bfin/bfin.opt.urls b/gcc/config/bfin/bfin.opt.urls
new file mode 100644
index 0000000..8210fee
--- /dev/null
+++ b/gcc/config/bfin/bfin.opt.urls
@@ -0,0 +1,61 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/bfin/bfin.opt and generated HTML
+
+msim
+UrlSuffix(gcc/Blackfin-Options.html#index-msim)
+
+mcpu=
+UrlSuffix(gcc/Blackfin-Options.html#index-mcpu_003d)
+
+momit-leaf-frame-pointer
+UrlSuffix(gcc/Blackfin-Options.html#index-momit-leaf-frame-pointer-1)
+
+mlow64k
+UrlSuffix(gcc/Blackfin-Options.html#index-mlow64k)
+
+mcsync-anomaly
+UrlSuffix(gcc/Blackfin-Options.html#index-mcsync-anomaly)
+
+mspecld-anomaly
+UrlSuffix(gcc/Blackfin-Options.html#index-mspecld-anomaly)
+
+mid-shared-library
+UrlSuffix(gcc/Blackfin-Options.html#index-mid-shared-library)
+
+mleaf-id-shared-library
+UrlSuffix(gcc/Blackfin-Options.html#index-mleaf-id-shared-library)
+
+mshared-library-id=
+UrlSuffix(gcc/Blackfin-Options.html#index-mshared-library-id)
+
+msep-data
+UrlSuffix(gcc/Blackfin-Options.html#index-msep-data)
+
+mlong-calls
+UrlSuffix(gcc/Blackfin-Options.html#index-mlong-calls-3)
+
+mfast-fp
+UrlSuffix(gcc/Blackfin-Options.html#index-mfast-fp)
+
+; skipping UrlSuffix for 'mfdpic' due to finding no URLs
+
+minline-plt
+UrlSuffix(gcc/Blackfin-Options.html#index-minline-plt)
+
+mstack-check-l1
+UrlSuffix(gcc/Blackfin-Options.html#index-mstack-check-l1)
+
+mmulticore
+UrlSuffix(gcc/Blackfin-Options.html#index-mmulticore)
+
+mcorea
+UrlSuffix(gcc/Blackfin-Options.html#index-mcorea)
+
+mcoreb
+UrlSuffix(gcc/Blackfin-Options.html#index-mcoreb)
+
+msdram
+UrlSuffix(gcc/Blackfin-Options.html#index-msdram)
+
+micplb
+UrlSuffix(gcc/Blackfin-Options.html#index-micplb)
+
diff --git a/gcc/config/bpf/bpf.opt.urls b/gcc/config/bpf/bpf.opt.urls
new file mode 100644
index 0000000..8c1e5f8
--- /dev/null
+++ b/gcc/config/bpf/bpf.opt.urls
@@ -0,0 +1,35 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/bpf/bpf.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/eBPF-Options.html#index-mbig-endian-5)
+
+mlittle-endian
+UrlSuffix(gcc/eBPF-Options.html#index-mlittle-endian-5)
+
+mco-re
+UrlSuffix(gcc/eBPF-Options.html#index-mco-re)
+
+mjmpext
+UrlSuffix(gcc/eBPF-Options.html#index-mjmpext)
+
+malu32
+UrlSuffix(gcc/eBPF-Options.html#index-malu32)
+
+mjmp32
+UrlSuffix(gcc/eBPF-Options.html#index-mjmp32)
+
+mv3-atomics
+UrlSuffix(gcc/eBPF-Options.html#index-mv3-atomics)
+
+mbswap
+UrlSuffix(gcc/eBPF-Options.html#index-mbswap)
+
+msdiv
+UrlSuffix(gcc/eBPF-Options.html#index-msdiv)
+
+msmov
+UrlSuffix(gcc/eBPF-Options.html#index-msmov)
+
+mcpu=
+UrlSuffix(gcc/eBPF-Options.html#index-mcpu-5)
+
diff --git a/gcc/config/c6x/c6x-tables.opt.urls b/gcc/config/c6x/c6x-tables.opt.urls
new file mode 100644
index 0000000..35d14c7
--- /dev/null
+++ b/gcc/config/c6x/c6x-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/c6x/c6x-tables.opt and generated HTML
+
diff --git a/gcc/config/c6x/c6x.opt.urls b/gcc/config/c6x/c6x.opt.urls
new file mode 100644
index 0000000..5b1c103
--- /dev/null
+++ b/gcc/config/c6x/c6x.opt.urls
@@ -0,0 +1,18 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/c6x/c6x.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/C6X-Options.html#index-mbig-endian-3)
+
+mlittle-endian
+UrlSuffix(gcc/C6X-Options.html#index-mlittle-endian-3)
+
+msim
+UrlSuffix(gcc/C6X-Options.html#index-msim-1)
+
+; skipping UrlSuffix for 'msdata=' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-calls' due to finding no URLs
+
+march=
+UrlSuffix(gcc/C6X-Options.html#index-march-3)
+
diff --git a/gcc/config/cris/cris.opt.urls b/gcc/config/cris/cris.opt.urls
new file mode 100644
index 0000000..56eeaa2
--- /dev/null
+++ b/gcc/config/cris/cris.opt.urls
@@ -0,0 +1,65 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/cris/cris.opt and generated HTML
+
+mmul-bug-workaround
+UrlSuffix(gcc/CRIS-Options.html#index-mmul-bug-workaround)
+
+metrax4
+UrlSuffix(gcc/CRIS-Options.html#index-metrax4)
+
+metrax100
+UrlSuffix(gcc/CRIS-Options.html#index-metrax100)
+
+mpdebug
+UrlSuffix(gcc/CRIS-Options.html#index-mpdebug)
+
+mcc-init
+UrlSuffix(gcc/CRIS-Options.html#index-mcc-init)
+
+mside-effects
+UrlSuffix(gcc/CRIS-Options.html#index-mside-effects)
+
+mno-side-effects
+UrlSuffix(gcc/CRIS-Options.html#index-mno-side-effects)
+
+mstack-align
+UrlSuffix(gcc/CRIS-Options.html#index-mstack-align)
+
+mno-stack-align
+UrlSuffix(gcc/CRIS-Options.html#index-mno-stack-align)
+
+mdata-align
+UrlSuffix(gcc/CRIS-Options.html#index-mdata-align)
+
+mno-data-align
+UrlSuffix(gcc/CRIS-Options.html#index-mno-data-align)
+
+mconst-align
+UrlSuffix(gcc/CRIS-Options.html#index-mconst-align)
+
+mno-const-align
+UrlSuffix(gcc/CRIS-Options.html#index-mno-const-align)
+
+m32-bit
+UrlSuffix(gcc/CRIS-Options.html#index-m32-bit)
+
+m16-bit
+UrlSuffix(gcc/CRIS-Options.html#index-m16-bit)
+
+m8-bit
+UrlSuffix(gcc/CRIS-Options.html#index-m8-bit)
+
+mprologue-epilogue
+UrlSuffix(gcc/CRIS-Options.html#index-mprologue-epilogue)
+
+mno-prologue-epilogue
+UrlSuffix(gcc/CRIS-Options.html#index-mno-prologue-epilogue)
+
+mcpu=
+UrlSuffix(gcc/CRIS-Options.html#index-mcpu-3)
+
+march=
+UrlSuffix(gcc/CRIS-Options.html#index-march-4)
+
+mtune=
+UrlSuffix(gcc/CRIS-Options.html#index-mtune-5)
+
diff --git a/gcc/config/cris/elf.opt.urls b/gcc/config/cris/elf.opt.urls
new file mode 100644
index 0000000..bdfa01e
--- /dev/null
+++ b/gcc/config/cris/elf.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/cris/elf.opt and generated HTML
+
+melf
+UrlSuffix(gcc/CRIS-Options.html#index-melf)
+
+sim
+UrlSuffix(gcc/CRIS-Options.html#index-sim)
+
diff --git a/gcc/config/csky/csky.opt.urls b/gcc/config/csky/csky.opt.urls
new file mode 100644
index 0000000..96b0b17
--- /dev/null
+++ b/gcc/config/csky/csky.opt.urls
@@ -0,0 +1,104 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/csky/csky.opt and generated HTML
+
+march=
+UrlSuffix(gcc/C-SKY-Options.html#index-march_003d)
+
+mcpu=
+UrlSuffix(gcc/C-SKY-Options.html#index-mcpu_003d-1)
+
+mbig-endian
+UrlSuffix(gcc/C-SKY-Options.html#index-mbig-endian-4)
+
+EB
+UrlSuffix(gcc/C-SKY-Options.html#index-EB-1)
+
+mlittle-endian
+UrlSuffix(gcc/C-SKY-Options.html#index-mlittle-endian-4)
+
+EL
+UrlSuffix(gcc/C-SKY-Options.html#index-EL-1)
+
+mhard-float
+UrlSuffix(gcc/C-SKY-Options.html#index-mhard-float)
+
+msoft-float
+UrlSuffix(gcc/C-SKY-Options.html#index-msoft-float-1)
+
+mfloat-abi=
+UrlSuffix(gcc/C-SKY-Options.html#index-mfloat-abi-1)
+
+mfpu=
+UrlSuffix(gcc/C-SKY-Options.html#index-mfpu_003d)
+
+mdouble-float
+UrlSuffix(gcc/C-SKY-Options.html#index-mdouble-float)
+
+mfdivdu
+UrlSuffix(gcc/C-SKY-Options.html#index-mfdivdu)
+
+melrw
+UrlSuffix(gcc/C-SKY-Options.html#index-melrw)
+
+mistack
+UrlSuffix(gcc/C-SKY-Options.html#index-mistack)
+
+mmp
+UrlSuffix(gcc/C-SKY-Options.html#index-mmp)
+
+mcp
+UrlSuffix(gcc/C-SKY-Options.html#index-mcp)
+
+mcache
+UrlSuffix(gcc/C-SKY-Options.html#index-mcache)
+
+msecurity
+UrlSuffix(gcc/C-SKY-Options.html#index-msecurity)
+
+mtrust
+UrlSuffix(gcc/C-SKY-Options.html#index-mtrust)
+
+mdsp
+UrlSuffix(gcc/C-SKY-Options.html#index-mdsp)
+
+medsp
+UrlSuffix(gcc/C-SKY-Options.html#index-medsp)
+
+mvdsp
+UrlSuffix(gcc/C-SKY-Options.html#index-mvdsp)
+
+mdiv
+UrlSuffix(gcc/C-SKY-Options.html#index-mdiv)
+
+msmart
+UrlSuffix(gcc/C-SKY-Options.html#index-msmart)
+
+mhigh-registers
+UrlSuffix(gcc/C-SKY-Options.html#index-mhigh-registers)
+
+manchor
+UrlSuffix(gcc/C-SKY-Options.html#index-manchor)
+
+mpushpop
+UrlSuffix(gcc/C-SKY-Options.html#index-mpushpop)
+
+mmultiple-stld
+UrlSuffix(gcc/C-SKY-Options.html#index-mmultiple-stld)
+
+mconstpool
+UrlSuffix(gcc/C-SKY-Options.html#index-mconstpool)
+
+mstack-size
+UrlSuffix(gcc/C-SKY-Options.html#index-mstack-size-1)
+
+mccrt
+UrlSuffix(gcc/C-SKY-Options.html#index-mccrt)
+
+mbranch-cost=
+UrlSuffix(gcc/C-SKY-Options.html#index-mbranch-cost_003d)
+
+msched-prolog
+UrlSuffix(gcc/C-SKY-Options.html#index-msched-prolog-1)
+
+msim
+UrlSuffix(gcc/C-SKY-Options.html#index-msim-2)
+
diff --git a/gcc/config/csky/csky_tables.opt.urls b/gcc/config/csky/csky_tables.opt.urls
new file mode 100644
index 0000000..eaa247bc
--- /dev/null
+++ b/gcc/config/csky/csky_tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/csky/csky_tables.opt and generated HTML
+
diff --git a/gcc/config/darwin.opt.urls b/gcc/config/darwin.opt.urls
new file mode 100644
index 0000000..e83d183
--- /dev/null
+++ b/gcc/config/darwin.opt.urls
@@ -0,0 +1,224 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/darwin.opt and generated HTML
+
+dependency-file
+UrlSuffix(gcc/Darwin-Options.html#index-dependency-file)
+
+fconstant-cfstrings
+UrlSuffix(gcc/Darwin-Options.html#index-fconstant-cfstrings)
+
+iframework
+UrlSuffix(gcc/Darwin-Options.html#index-iframework)
+
+mconstant-cfstrings
+UrlSuffix(gcc/Darwin-Options.html#index-mconstant-cfstrings)
+
+; skipping UrlSuffix for 'mdynamic-no-pic' due to finding no URLs
+
+mfix-and-continue
+UrlSuffix(gcc/Darwin-Options.html#index-mfix-and-continue)
+
+mkernel
+UrlSuffix(gcc/Darwin-Options.html#index-mkernel)
+
+mmacosx-version-min=
+UrlSuffix(gcc/Darwin-Options.html#index-mmacosx-version-min)
+
+mone-byte-bool
+UrlSuffix(gcc/Darwin-Options.html#index-mone-byte-bool)
+
+all_load
+UrlSuffix(gcc/Darwin-Options.html#index-all_005fload)
+
+allowable_client
+UrlSuffix(gcc/Darwin-Options.html#index-allowable_005fclient)
+
+arch_errors_fatal
+UrlSuffix(gcc/Darwin-Options.html#index-arch_005ferrors_005ffatal)
+
+bind_at_load
+UrlSuffix(gcc/Darwin-Options.html#index-bind_005fat_005fload)
+
+bundle
+UrlSuffix(gcc/Darwin-Options.html#index-bundle)
+
+bundle_loader
+UrlSuffix(gcc/Darwin-Options.html#index-bundle_005floader)
+
+client_name
+UrlSuffix(gcc/Darwin-Options.html#index-client_005fname)
+
+compatibility_version
+UrlSuffix(gcc/Darwin-Options.html#index-compatibility_005fversion)
+
+current_version
+UrlSuffix(gcc/Darwin-Options.html#index-current_005fversion)
+
+dead_strip
+UrlSuffix(gcc/Darwin-Options.html#index-dead_005fstrip)
+
+dylib_file
+UrlSuffix(gcc/Darwin-Options.html#index-dylib_005ffile)
+
+dylinker_install_name
+UrlSuffix(gcc/Darwin-Options.html#index-dylinker_005finstall_005fname)
+
+dynamic
+UrlSuffix(gcc/Darwin-Options.html#index-dynamic)
+
+dynamiclib
+UrlSuffix(gcc/Darwin-Options.html#index-dynamiclib)
+
+exported_symbols_list
+UrlSuffix(gcc/Darwin-Options.html#index-exported_005fsymbols_005flist)
+
+filelist
+UrlSuffix(gcc/Darwin-Options.html#index-filelist)
+
+flat_namespace
+UrlSuffix(gcc/Darwin-Options.html#index-flat_005fnamespace)
+
+force_cpusubtype_ALL
+UrlSuffix(gcc/Darwin-Options.html#index-force_005fcpusubtype_005fALL)
+
+force_flat_namespace
+UrlSuffix(gcc/Darwin-Options.html#index-force_005fflat_005fnamespace)
+
+gfull
+UrlSuffix(gcc/Darwin-Options.html#index-gfull)
+
+gused
+UrlSuffix(gcc/Darwin-Options.html#index-gused)
+
+headerpad_max_install_names
+UrlSuffix(gcc/Darwin-Options.html#index-headerpad_005fmax_005finstall_005fnames)
+
+image_base
+UrlSuffix(gcc/Darwin-Options.html#index-image_005fbase)
+
+init
+UrlSuffix(gcc/Darwin-Options.html#index-init)
+
+install_name
+UrlSuffix(gcc/Darwin-Options.html#index-install_005fname)
+
+keep_private_externs
+UrlSuffix(gcc/Darwin-Options.html#index-keep_005fprivate_005fexterns)
+
+multi_module
+UrlSuffix(gcc/Darwin-Options.html#index-multi_005fmodule)
+
+multiply_defined
+UrlSuffix(gcc/Darwin-Options.html#index-multiply_005fdefined)
+
+multiply_defined_unused
+UrlSuffix(gcc/Darwin-Options.html#index-multiply_005fdefined_005funused)
+
+no_dead_strip_inits_and_terms
+UrlSuffix(gcc/Darwin-Options.html#index-no_005fdead_005fstrip_005finits_005fand_005fterms)
+
+nodefaultrpaths
+UrlSuffix(gcc/Darwin-Options.html#index-nodefaultrpaths)
+
+nofixprebinding
+UrlSuffix(gcc/Darwin-Options.html#index-nofixprebinding)
+
+nomultidefs
+UrlSuffix(gcc/Darwin-Options.html#index-nomultidefs)
+
+noprebind
+UrlSuffix(gcc/Darwin-Options.html#index-noprebind)
+
+noseglinkedit
+UrlSuffix(gcc/Darwin-Options.html#index-noseglinkedit)
+
+pagezero_size
+UrlSuffix(gcc/Darwin-Options.html#index-pagezero_005fsize)
+
+prebind
+UrlSuffix(gcc/Darwin-Options.html#index-prebind)
+
+prebind_all_twolevel_modules
+UrlSuffix(gcc/Darwin-Options.html#index-prebind_005fall_005ftwolevel_005fmodules)
+
+private_bundle
+UrlSuffix(gcc/Darwin-Options.html#index-private_005fbundle)
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
+read_only_relocs
+UrlSuffix(gcc/Darwin-Options.html#index-read_005fonly_005frelocs)
+
+sectalign
+UrlSuffix(gcc/Darwin-Options.html#index-sectalign)
+
+sectcreate
+UrlSuffix(gcc/Darwin-Options.html#index-sectcreate)
+
+sectobjectsymbols
+UrlSuffix(gcc/Darwin-Options.html#index-sectobjectsymbols)
+
+sectorder
+UrlSuffix(gcc/Darwin-Options.html#index-sectorder)
+
+seg_addr_table
+UrlSuffix(gcc/Darwin-Options.html#index-seg_005faddr_005ftable)
+
+seg_addr_table_filename
+UrlSuffix(gcc/Darwin-Options.html#index-seg_005faddr_005ftable_005ffilename)
+
+seg1addr
+UrlSuffix(gcc/Darwin-Options.html#index-seg1addr)
+
+segaddr
+UrlSuffix(gcc/Darwin-Options.html#index-segaddr)
+
+seglinkedit
+UrlSuffix(gcc/Darwin-Options.html#index-seglinkedit)
+
+segprot
+UrlSuffix(gcc/Darwin-Options.html#index-segprot)
+
+segs_read_only_addr
+UrlSuffix(gcc/Darwin-Options.html#index-segs_005fread_005fonly_005faddr)
+
+segs_read_write_addr
+UrlSuffix(gcc/Darwin-Options.html#index-segs_005fread_005fwrite_005faddr)
+
+single_module
+UrlSuffix(gcc/Darwin-Options.html#index-single_005fmodule)
+
+sub_library
+UrlSuffix(gcc/Darwin-Options.html#index-sub_005flibrary)
+
+sub_umbrella
+UrlSuffix(gcc/Darwin-Options.html#index-sub_005fumbrella)
+
+twolevel_namespace
+UrlSuffix(gcc/Darwin-Options.html#index-twolevel_005fnamespace)
+
+umbrella
+UrlSuffix(gcc/Darwin-Options.html#index-umbrella)
+
+undefined
+UrlSuffix(gcc/Darwin-Options.html#index-undefined)
+
+unexported_symbols_list
+UrlSuffix(gcc/Darwin-Options.html#index-unexported_005fsymbols_005flist)
+
+weak_reference_mismatches
+UrlSuffix(gcc/Darwin-Options.html#index-weak_005freference_005fmismatches)
+
+whatsloaded
+UrlSuffix(gcc/Darwin-Options.html#index-whatsloaded)
+
+whyload
+UrlSuffix(gcc/Darwin-Options.html#index-whyload)
+
+X
+LangUrlSuffix_D(gdc/Code-Generation.html#index-X)
+
diff --git a/gcc/config/dragonfly.opt.urls b/gcc/config/dragonfly.opt.urls
new file mode 100644
index 0000000..62e2e21
--- /dev/null
+++ b/gcc/config/dragonfly.opt.urls
@@ -0,0 +1,9 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/dragonfly.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/epiphany/epiphany.opt.urls b/gcc/config/epiphany/epiphany.opt.urls
new file mode 100644
index 0000000..a8e28c4
--- /dev/null
+++ b/gcc/config/epiphany/epiphany.opt.urls
@@ -0,0 +1,52 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/epiphany/epiphany.opt and generated HTML
+
+mhalf-reg-file
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mhalf-reg-file)
+
+mprefer-short-insn-regs
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mprefer-short-insn-regs)
+
+mbranch-cost=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mbranch-cost)
+
+mcmove
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mcmove)
+
+mnops=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mnops)
+
+msoft-cmpsf
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msoft-cmpsf)
+
+msplit-lohi
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msplit-lohi)
+
+mstack-offset=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mstack-offset)
+
+mround-nearest
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mround-nearest)
+
+mlong-calls
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mlong-calls)
+
+; skipping UrlSuffix for 'mshort-calls' due to finding no URLs
+
+msmall16
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msmall16)
+
+mfp-mode=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mfp-mode)
+
+mvect-double
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mvect-double)
+
+max-vect-align=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-max-vect-align)
+
+msplit-vecmove-early
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msplit-vecmove-early)
+
+m1reg-
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-m1reg-)
+
diff --git a/gcc/config/fr30/fr30.opt.urls b/gcc/config/fr30/fr30.opt.urls
new file mode 100644
index 0000000..eabbfbf
--- /dev/null
+++ b/gcc/config/fr30/fr30.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/fr30/fr30.opt and generated HTML
+
+msmall-model
+UrlSuffix(gcc/FR30-Options.html#index-msmall-model)
+
+mno-lsim
+UrlSuffix(gcc/FR30-Options.html#index-mno-lsim)
+
diff --git a/gcc/config/freebsd.opt.urls b/gcc/config/freebsd.opt.urls
new file mode 100644
index 0000000..3be69e4
--- /dev/null
+++ b/gcc/config/freebsd.opt.urls
@@ -0,0 +1,9 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/freebsd.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/frv/frv.opt.urls b/gcc/config/frv/frv.opt.urls
new file mode 100644
index 0000000..d3d3757
--- /dev/null
+++ b/gcc/config/frv/frv.opt.urls
@@ -0,0 +1,111 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/frv/frv.opt and generated HTML
+
+macc-4
+UrlSuffix(gcc/FRV-Options.html#index-macc-4)
+
+macc-8
+UrlSuffix(gcc/FRV-Options.html#index-macc-8)
+
+malign-labels
+UrlSuffix(gcc/FRV-Options.html#index-malign-labels)
+
+malloc-cc
+UrlSuffix(gcc/FRV-Options.html#index-malloc-cc)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+mcond-exec
+UrlSuffix(gcc/FRV-Options.html#index-mcond-exec)
+
+mcond-move
+UrlSuffix(gcc/FRV-Options.html#index-mcond-move)
+
+mcpu=
+UrlSuffix(gcc/FRV-Options.html#index-mcpu-6)
+
+; skipping UrlSuffix for 'mdebug' due to finding no URLs
+
+mdouble
+UrlSuffix(gcc/FRV-Options.html#index-mdouble-1)
+
+mdword
+UrlSuffix(gcc/FRV-Options.html#index-mdword)
+
+mfdpic
+UrlSuffix(gcc/FRV-Options.html#index-mfdpic-1)
+
+mfixed-cc
+UrlSuffix(gcc/FRV-Options.html#index-mfixed-cc)
+
+mfpr-32
+UrlSuffix(gcc/FRV-Options.html#index-mfpr-32)
+
+mfpr-64
+UrlSuffix(gcc/FRV-Options.html#index-mfpr-64)
+
+mgpr-32
+UrlSuffix(gcc/FRV-Options.html#index-mgpr-32)
+
+mgpr-64
+UrlSuffix(gcc/FRV-Options.html#index-mgpr-64)
+
+mgprel-ro
+UrlSuffix(gcc/FRV-Options.html#index-mgprel-ro)
+
+mhard-float
+UrlSuffix(gcc/FRV-Options.html#index-mhard-float-1)
+
+minline-plt
+UrlSuffix(gcc/FRV-Options.html#index-minline-plt-1)
+
+mlibrary-pic
+UrlSuffix(gcc/FRV-Options.html#index-mlibrary-pic)
+
+mlinked-fp
+UrlSuffix(gcc/FRV-Options.html#index-mlinked-fp)
+
+mlong-calls
+UrlSuffix(gcc/FRV-Options.html#index-mlong-calls-4)
+
+mmedia
+UrlSuffix(gcc/FRV-Options.html#index-mmedia)
+
+mmuladd
+UrlSuffix(gcc/FRV-Options.html#index-mmuladd)
+
+mmulti-cond-exec
+UrlSuffix(gcc/FRV-Options.html#index-mmulti-cond-exec)
+
+mnested-cond-exec
+UrlSuffix(gcc/FRV-Options.html#index-mnested-cond-exec)
+
+mno-eflags
+UrlSuffix(gcc/FRV-Options.html#index-mno-eflags)
+
+moptimize-membar
+UrlSuffix(gcc/FRV-Options.html#index-moptimize-membar)
+
+mpack
+UrlSuffix(gcc/FRV-Options.html#index-mpack)
+
+mscc
+UrlSuffix(gcc/FRV-Options.html#index-mscc)
+
+msoft-float
+UrlSuffix(gcc/FRV-Options.html#index-msoft-float-3)
+
+mTLS
+UrlSuffix(gcc/FRV-Options.html#index-mTLS)
+
+mtls
+UrlSuffix(gcc/FRV-Options.html#index-mtls)
+
+mtomcat-stats
+UrlSuffix(gcc/FRV-Options.html#index-mtomcat-stats)
+
+multilib-library-pic
+UrlSuffix(gcc/FRV-Options.html#index-multilib-library-pic)
+
+mvliw-branch
+UrlSuffix(gcc/FRV-Options.html#index-mvliw-branch)
+
diff --git a/gcc/config/ft32/ft32.opt.urls b/gcc/config/ft32/ft32.opt.urls
new file mode 100644
index 0000000..707cb83
--- /dev/null
+++ b/gcc/config/ft32/ft32.opt.urls
@@ -0,0 +1,20 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ft32/ft32.opt and generated HTML
+
+msim
+UrlSuffix(gcc/FT32-Options.html#index-msim-3)
+
+mlra
+UrlSuffix(gcc/FT32-Options.html#index-mlra-1)
+
+mnodiv
+UrlSuffix(gcc/FT32-Options.html#index-mnodiv)
+
+mft32b
+UrlSuffix(gcc/FT32-Options.html#index-mft32b)
+
+mcompress
+UrlSuffix(gcc/FT32-Options.html#index-mcompress)
+
+mnopm
+UrlSuffix(gcc/FT32-Options.html#index-mnopm)
+
diff --git a/gcc/config/fused-madd.opt.urls b/gcc/config/fused-madd.opt.urls
new file mode 100644
index 0000000..0bd906c
--- /dev/null
+++ b/gcc/config/fused-madd.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/fused-madd.opt and generated HTML
+
+; skipping UrlSuffix for 'mfused-madd' due to finding no URLs
+
diff --git a/gcc/config/g.opt.urls b/gcc/config/g.opt.urls
new file mode 100644
index 0000000..4ffd5cb
--- /dev/null
+++ b/gcc/config/g.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/g.opt and generated HTML
+
+G
+UrlSuffix(gcc/System-V-Options.html#index-G-5)
+
diff --git a/gcc/config/gcn/gcn.opt.urls b/gcc/config/gcn/gcn.opt.urls
new file mode 100644
index 0000000..7bc0ef4
--- /dev/null
+++ b/gcc/config/gcn/gcn.opt.urls
@@ -0,0 +1,23 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/gcn/gcn.opt and generated HTML
+
+march=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-march-1)
+
+mtune=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-mtune-1)
+
+; skipping UrlSuffix for 'm32' due to finding no URLs
+
+; skipping UrlSuffix for 'm64' due to finding no URLs
+
+; skipping UrlSuffix for 'mgomp' due to finding no URLs
+
+mstack-size=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-mstack-size)
+
+mxnack=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-mxnack)
+
+msram-ecc=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-msram-ecc)
+
diff --git a/gcc/config/gnu-user.opt.urls b/gcc/config/gnu-user.opt.urls
new file mode 100644
index 0000000..42021e1
--- /dev/null
+++ b/gcc/config/gnu-user.opt.urls
@@ -0,0 +1,9 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/gnu-user.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/h8300/h8300.opt.urls b/gcc/config/h8300/h8300.opt.urls
new file mode 100644
index 0000000..8cbd7c3
--- /dev/null
+++ b/gcc/config/h8300/h8300.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/h8300/h8300.opt and generated HTML
+
+ms
+UrlSuffix(gcc/H8_002f300-Options.html#index-ms)
+
+ms2600
+UrlSuffix(gcc/H8_002f300-Options.html#index-ms2600)
+
+mint32
+UrlSuffix(gcc/H8_002f300-Options.html#index-mint32)
+
+mrelax
+UrlSuffix(gcc/H8_002f300-Options.html#index-mrelax-1)
+
+mh
+UrlSuffix(gcc/H8_002f300-Options.html#index-mh)
+
+mn
+UrlSuffix(gcc/H8_002f300-Options.html#index-mn)
+
+malign-300
+UrlSuffix(gcc/H8_002f300-Options.html#index-malign-300)
+
+mexr
+UrlSuffix(gcc/H8_002f300-Options.html#index-mexr)
+
+mno-exr
+UrlSuffix(gcc/H8_002f300-Options.html#index-mno-exr)
+
diff --git a/gcc/config/hpux11.opt.urls b/gcc/config/hpux11.opt.urls
new file mode 100644
index 0000000..84fef2e
--- /dev/null
+++ b/gcc/config/hpux11.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/hpux11.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/i386/cygming.opt.urls b/gcc/config/i386/cygming.opt.urls
new file mode 100644
index 0000000..87799be
--- /dev/null
+++ b/gcc/config/i386/cygming.opt.urls
@@ -0,0 +1,30 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/cygming.opt and generated HTML
+
+mconsole
+UrlSuffix(gcc/x86-Windows-Options.html#index-mconsole)
+
+mdll
+UrlSuffix(gcc/x86-Windows-Options.html#index-mdll)
+
+mnop-fun-dllimport
+UrlSuffix(gcc/x86-Windows-Options.html#index-mnop-fun-dllimport)
+
+; skipping UrlSuffix for 'mthreads' due to multiple URLs:
+; duplicate: 'gcc/x86-Options.html#index-mthreads'
+; duplicate: 'gcc/x86-Windows-Options.html#index-mthreads-1'
+
+mwin32
+UrlSuffix(gcc/x86-Windows-Options.html#index-mwin32)
+
+mwindows
+UrlSuffix(gcc/x86-Windows-Options.html#index-mwindows)
+
+mpe-aligned-commons
+UrlSuffix(gcc/x86-Windows-Options.html#index-mpe-aligned-commons)
+
+fset-stack-executable
+UrlSuffix(gcc/x86-Windows-Options.html#index-fno-set-stack-executable)
+
+fwritable-relocated-rdata
+UrlSuffix(gcc/x86-Windows-Options.html#index-fno-writable-relocated-rdata)
+
diff --git a/gcc/config/i386/cygwin.opt.urls b/gcc/config/i386/cygwin.opt.urls
new file mode 100644
index 0000000..c484efc
--- /dev/null
+++ b/gcc/config/i386/cygwin.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/cygwin.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/i386/djgpp.opt.urls b/gcc/config/i386/djgpp.opt.urls
new file mode 100644
index 0000000..8a723ab0
--- /dev/null
+++ b/gcc/config/i386/djgpp.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/djgpp.opt and generated HTML
+
diff --git a/gcc/config/i386/i386.opt.urls b/gcc/config/i386/i386.opt.urls
new file mode 100644
index 0000000..9b988fd
--- /dev/null
+++ b/gcc/config/i386/i386.opt.urls
@@ -0,0 +1,611 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/i386.opt and generated HTML
+
+m128bit-long-double
+UrlSuffix(gcc/x86-Options.html#index-m128bit-long-double)
+
+m80387
+UrlSuffix(gcc/x86-Options.html#index-m80387)
+
+m96bit-long-double
+UrlSuffix(gcc/x86-Options.html#index-m96bit-long-double)
+
+mlong-double-80
+UrlSuffix(gcc/x86-Options.html#index-mlong-double-80)
+
+mlong-double-64
+UrlSuffix(gcc/x86-Options.html#index-mlong-double-64-1)
+
+mlong-double-128
+UrlSuffix(gcc/x86-Options.html#index-mlong-double-128-1)
+
+maccumulate-outgoing-args
+UrlSuffix(gcc/x86-Options.html#index-maccumulate-outgoing-args-1)
+
+malign-double
+UrlSuffix(gcc/x86-Options.html#index-malign-double)
+
+; skipping UrlSuffix for 'malign-loops=' due to finding no URLs
+
+malign-stringops
+UrlSuffix(gcc/x86-Options.html#index-malign-stringops)
+
+malign-data=
+UrlSuffix(gcc/x86-Options.html#index-malign-data-1)
+
+march=
+UrlSuffix(gcc/x86-Options.html#index-march-16)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+mlarge-data-threshold=
+UrlSuffix(gcc/x86-Options.html#index-mlarge-data-threshold)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mcpu=
+UrlSuffix(gcc/x86-Options.html#index-mcpu-14)
+
+mfancy-math-387
+UrlSuffix(gcc/x86-Options.html#index-mfancy-math-387)
+
+mfp-ret-in-387
+UrlSuffix(gcc/x86-Options.html#index-mfp-ret-in-387)
+
+; skipping UrlSuffix for 'mfpmath=' due to multiple URLs:
+; duplicate: 'gcc/Optimize-Options.html#index-mfpmath'
+; duplicate: 'gcc/x86-Options.html#index-mfpmath-1'
+
+mhard-float
+UrlSuffix(gcc/x86-Options.html#index-mhard-float-11)
+
+mieee-fp
+UrlSuffix(gcc/x86-Options.html#index-mieee-fp)
+
+minline-all-stringops
+UrlSuffix(gcc/x86-Options.html#index-minline-all-stringops)
+
+minline-stringops-dynamically
+UrlSuffix(gcc/x86-Options.html#index-minline-stringops-dynamically)
+
+mms-bitfields
+UrlSuffix(gcc/x86-Options.html#index-mms-bitfields)
+
+mno-align-stringops
+UrlSuffix(gcc/x86-Options.html#index-mno-align-stringops)
+
+mno-fancy-math-387
+UrlSuffix(gcc/x86-Options.html#index-mno-fancy-math-387)
+
+mno-push-args
+UrlSuffix(gcc/x86-Options.html#index-mno-push-args)
+
+mno-red-zone
+UrlSuffix(gcc/x86-Options.html#index-mno-red-zone)
+
+momit-leaf-frame-pointer
+UrlSuffix(gcc/x86-Options.html#index-momit-leaf-frame-pointer-2)
+
+mrelax-cmpxchg-loop
+UrlSuffix(gcc/x86-Options.html#index-mrelax-cmpxchg-loop)
+
+mpc32
+UrlSuffix(gcc/x86-Options.html#index-mpc32)
+
+mpc64
+UrlSuffix(gcc/x86-Options.html#index-mpc64)
+
+mpc80
+UrlSuffix(gcc/x86-Options.html#index-mpc80)
+
+mdaz-ftz
+UrlSuffix(gcc/x86-Options.html#index-mdaz-ftz)
+
+mpreferred-stack-boundary=
+UrlSuffix(gcc/x86-Options.html#index-mpreferred-stack-boundary-1)
+
+mincoming-stack-boundary=
+UrlSuffix(gcc/x86-Options.html#index-mincoming-stack-boundary)
+
+mpush-args
+UrlSuffix(gcc/x86-Options.html#index-mpush-args)
+
+mred-zone
+UrlSuffix(gcc/x86-Options.html#index-mred-zone)
+
+mregparm=
+UrlSuffix(gcc/x86-Options.html#index-mregparm)
+
+mrtd
+UrlSuffix(gcc/x86-Options.html#index-mrtd-1)
+
+msoft-float
+UrlSuffix(gcc/x86-Options.html#index-msoft-float-16)
+
+msseregparm
+UrlSuffix(gcc/x86-Options.html#index-msseregparm)
+
+mstackrealign
+UrlSuffix(gcc/x86-Options.html#index-mstackrealign)
+
+mtls-dialect=
+UrlSuffix(gcc/x86-Options.html#index-mtls-dialect-1)
+
+mtls-direct-seg-refs
+UrlSuffix(gcc/x86-Options.html#index-mtls-direct-seg-refs)
+
+mtune=
+UrlSuffix(gcc/x86-Options.html#index-mtune-17)
+
+mno-default
+UrlSuffix(gcc/x86-Options.html#index-mno-default)
+
+mdump-tune-features
+UrlSuffix(gcc/x86-Options.html#index-mdump-tune-features)
+
+miamcu
+UrlSuffix(gcc/x86-Options.html#index-miamcu)
+
+mabi=
+UrlSuffix(gcc/x86-Options.html#index-mabi-6)
+
+mcall-ms2sysv-xlogues
+UrlSuffix(gcc/x86-Options.html#index-mcall-ms2sysv-xlogues)
+
+mveclibabi=
+UrlSuffix(gcc/x86-Options.html#index-mveclibabi-1)
+
+mvect8-ret-in-mem
+UrlSuffix(gcc/x86-Options.html#index-mvect8-ret-in-mem)
+
+mrecip
+UrlSuffix(gcc/x86-Options.html#index-mrecip-2)
+
+mrecip=
+UrlSuffix(gcc/x86-Options.html#index-mrecip-2)
+
+mcld
+UrlSuffix(gcc/x86-Options.html#index-mcld)
+
+mvzeroupper
+UrlSuffix(gcc/x86-Options.html#index-mvzeroupper)
+
+mprefer-avx128
+UrlSuffix(gcc/x86-Options.html#index-mprefer-avx128)
+
+mprefer-vector-width=
+UrlSuffix(gcc/x86-Options.html#index-mprefer-vector-width)
+
+mpartial-vector-fp-math
+UrlSuffix(gcc/x86-Options.html#index-mpartial-vector-fp-math)
+
+mmove-max=
+UrlSuffix(gcc/x86-Options.html#index-mmove-max)
+
+mstore-max=
+UrlSuffix(gcc/x86-Options.html#index-mstore-max)
+
+m32
+UrlSuffix(gcc/x86-Options.html#index-m32-2)
+
+m64
+UrlSuffix(gcc/x86-Options.html#index-m64-4)
+
+mx32
+UrlSuffix(gcc/x86-Options.html#index-mx32)
+
+m16
+UrlSuffix(gcc/x86-Options.html#index-m16)
+
+mmmx
+UrlSuffix(gcc/x86-Options.html#index-mmmx)
+
+m3dnow
+UrlSuffix(gcc/x86-Options.html#index-m3dnow)
+
+m3dnowa
+UrlSuffix(gcc/x86-Options.html#index-m3dnowa)
+
+msse
+UrlSuffix(gcc/x86-Options.html#index-msse)
+
+msse2
+UrlSuffix(gcc/x86-Options.html#index-msse2)
+
+msse3
+UrlSuffix(gcc/x86-Options.html#index-msse3)
+
+mssse3
+UrlSuffix(gcc/x86-Options.html#index-mssse3)
+
+msse4.1
+UrlSuffix(gcc/x86-Options.html#index-msse4_002e1)
+
+msse4.2
+UrlSuffix(gcc/x86-Options.html#index-msse4_002e2)
+
+msse4
+UrlSuffix(gcc/x86-Options.html#index-msse4)
+
+mavx
+UrlSuffix(gcc/x86-Options.html#index-mavx)
+
+mavx2
+UrlSuffix(gcc/x86-Options.html#index-mavx2)
+
+mavx512f
+UrlSuffix(gcc/x86-Options.html#index-mavx512f)
+
+mavx512pf
+UrlSuffix(gcc/x86-Options.html#index-mavx512pf)
+
+mavx512er
+UrlSuffix(gcc/x86-Options.html#index-mavx512er)
+
+mavx512cd
+UrlSuffix(gcc/x86-Options.html#index-mavx512cd)
+
+mavx512dq
+UrlSuffix(gcc/x86-Options.html#index-mavx512dq)
+
+mavx512bw
+UrlSuffix(gcc/x86-Options.html#index-mavx512bw)
+
+mavx512vl
+UrlSuffix(gcc/x86-Options.html#index-mavx512vl)
+
+mavx512ifma
+UrlSuffix(gcc/x86-Options.html#index-mavx512ifma)
+
+mavx512vbmi
+UrlSuffix(gcc/x86-Options.html#index-mavx512vbmi)
+
+mavx5124fmaps
+UrlSuffix(gcc/x86-Options.html#index-mavx5124fmaps)
+
+mavx5124vnniw
+UrlSuffix(gcc/x86-Options.html#index-mavx5124vnniw)
+
+mavx512vpopcntdq
+UrlSuffix(gcc/x86-Options.html#index-mavx512vpopcntdq)
+
+mavx512vbmi2
+UrlSuffix(gcc/x86-Options.html#index-mavx512vbmi2)
+
+mavx512vnni
+UrlSuffix(gcc/x86-Options.html#index-mavx512vnni)
+
+mavx512bitalg
+UrlSuffix(gcc/x86-Options.html#index-mavx512bitalg)
+
+mavx512vp2intersect
+UrlSuffix(gcc/x86-Options.html#index-mavx512vp2intersect)
+
+mfma
+UrlSuffix(gcc/x86-Options.html#index-mfma)
+
+msse4a
+UrlSuffix(gcc/x86-Options.html#index-msse4a)
+
+mfma4
+UrlSuffix(gcc/x86-Options.html#index-mfma4)
+
+mxop
+UrlSuffix(gcc/x86-Options.html#index-mxop)
+
+mlwp
+UrlSuffix(gcc/x86-Options.html#index-mlwp)
+
+mabm
+UrlSuffix(gcc/x86-Options.html#index-mabm)
+
+mpopcnt
+UrlSuffix(gcc/x86-Options.html#index-mpopcnt)
+
+mpconfig
+UrlSuffix(gcc/x86-Options.html#index-mpconfig)
+
+mwbnoinvd
+UrlSuffix(gcc/x86-Options.html#index-mwbnoinvd)
+
+mptwrite
+UrlSuffix(gcc/x86-Options.html#index-mptwrite)
+
+muintr
+UrlSuffix(gcc/x86-Options.html#index-muintr)
+
+msgx
+UrlSuffix(gcc/x86-Options.html#index-msgx)
+
+mrdpid
+UrlSuffix(gcc/x86-Options.html#index-mrdpid)
+
+mgfni
+UrlSuffix(gcc/x86-Options.html#index-mgfni)
+
+mvaes
+UrlSuffix(gcc/x86-Options.html#index-mvaes)
+
+mvpclmulqdq
+UrlSuffix(gcc/x86-Options.html#index-mvpclmulqdq)
+
+mbmi
+UrlSuffix(gcc/x86-Options.html#index-mbmi)
+
+mbmi2
+UrlSuffix(gcc/x86-Options.html#index-mbmi2)
+
+mlzcnt
+UrlSuffix(gcc/x86-Options.html#index-mlzcnt)
+
+mhle
+UrlSuffix(gcc/x86-Options.html#index-mhle)
+
+mrdseed
+UrlSuffix(gcc/x86-Options.html#index-mrdseed)
+
+mprfchw
+UrlSuffix(gcc/x86-Options.html#index-mprfchw)
+
+madx
+UrlSuffix(gcc/x86-Options.html#index-madx)
+
+mclflushopt
+UrlSuffix(gcc/x86-Options.html#index-mclflushopt)
+
+mclwb
+UrlSuffix(gcc/x86-Options.html#index-mclwb)
+
+mfxsr
+UrlSuffix(gcc/x86-Options.html#index-mfxsr)
+
+mxsave
+UrlSuffix(gcc/x86-Options.html#index-mxsave)
+
+mxsaveopt
+UrlSuffix(gcc/x86-Options.html#index-mxsaveopt)
+
+mxsavec
+UrlSuffix(gcc/x86-Options.html#index-mxsavec)
+
+mxsaves
+UrlSuffix(gcc/x86-Options.html#index-mxsaves)
+
+mtbm
+UrlSuffix(gcc/x86-Options.html#index-mtbm)
+
+mcx16
+UrlSuffix(gcc/x86-Options.html#index-mcx16)
+
+msahf
+UrlSuffix(gcc/x86-Options.html#index-msahf)
+
+mmovbe
+UrlSuffix(gcc/x86-Options.html#index-mmovbe)
+
+mcrc32
+UrlSuffix(gcc/x86-Options.html#index-mcrc32)
+
+maes
+UrlSuffix(gcc/x86-Options.html#index-maes)
+
+msha
+UrlSuffix(gcc/x86-Options.html#index-msha)
+
+mpclmul
+UrlSuffix(gcc/x86-Options.html#index-mpclmul)
+
+msse2avx
+UrlSuffix(gcc/x86-Options.html#index-msse2avx)
+
+mfsgsbase
+UrlSuffix(gcc/x86-Options.html#index-mfsgsbase)
+
+mrdrnd
+UrlSuffix(gcc/x86-Options.html#index-mrdrnd)
+
+mf16c
+UrlSuffix(gcc/x86-Options.html#index-mf16c)
+
+mprefetchwt1
+UrlSuffix(gcc/x86-Options.html#index-mprefetchwt1)
+
+mfentry
+UrlSuffix(gcc/x86-Options.html#index-mfentry)
+
+mrecord-mcount
+UrlSuffix(gcc/x86-Options.html#index-mrecord-mcount)
+
+mnop-mcount
+UrlSuffix(gcc/x86-Options.html#index-mnop-mcount)
+
+mfentry-name=
+UrlSuffix(gcc/x86-Options.html#index-mfentry-name)
+
+mfentry-section=
+UrlSuffix(gcc/x86-Options.html#index-mfentry-section)
+
+mskip-rax-setup
+UrlSuffix(gcc/x86-Options.html#index-mskip-rax-setup)
+
+m8bit-idiv
+UrlSuffix(gcc/x86-Options.html#index-m8bit-idiv)
+
+mavx256-split-unaligned-load
+UrlSuffix(gcc/x86-Options.html#index-mavx256-split-unaligned-load)
+
+mavx256-split-unaligned-store
+UrlSuffix(gcc/x86-Options.html#index-mavx256-split-unaligned-store)
+
+mrtm
+UrlSuffix(gcc/x86-Options.html#index-mrtm)
+
+mmwaitx
+UrlSuffix(gcc/x86-Options.html#index-mmwaitx)
+
+mclzero
+UrlSuffix(gcc/x86-Options.html#index-mclzero)
+
+mpku
+UrlSuffix(gcc/x86-Options.html#index-mpku)
+
+mstack-protector-guard=
+UrlSuffix(gcc/x86-Options.html#index-mstack-protector-guard-4)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/x86-Options.html#index-mstack-protector-guard-reg-3)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/x86-Options.html#index-mstack-protector-guard-offset-4)
+
+; skipping UrlSuffix for 'mstack-protector-guard-symbol=' due to finding no URLs
+
+mgeneral-regs-only
+UrlSuffix(gcc/x86-Options.html#index-mgeneral-regs-only-2)
+
+mshstk
+UrlSuffix(gcc/x86-Options.html#index-mshstk)
+
+mcet-switch
+UrlSuffix(gcc/x86-Options.html#index-mcet-switch)
+
+mmanual-endbr
+UrlSuffix(gcc/x86-Options.html#index-mmanual-endbr)
+
+mforce-indirect-call
+UrlSuffix(gcc/x86-Options.html#index-mforce-indirect-call)
+
+mindirect-branch=
+UrlSuffix(gcc/x86-Options.html#index-mindirect-branch)
+
+mfunction-return=
+UrlSuffix(gcc/x86-Options.html#index-mfunction-return)
+
+mindirect-branch-cs-prefix
+UrlSuffix(gcc/x86-Options.html#index-mindirect-branch-cs-prefix)
+
+mindirect-branch-register
+UrlSuffix(gcc/x86-Options.html#index-mindirect-branch-register)
+
+mmovdiri
+UrlSuffix(gcc/x86-Options.html#index-mmovdiri)
+
+mmovdir64b
+UrlSuffix(gcc/x86-Options.html#index-mmovdir64b)
+
+mwaitpkg
+UrlSuffix(gcc/x86-Options.html#index-mwaitpkg)
+
+mcldemote
+UrlSuffix(gcc/x86-Options.html#index-mcldemote)
+
+minstrument-return=
+UrlSuffix(gcc/x86-Options.html#index-minstrument-return)
+
+mrecord-return
+UrlSuffix(gcc/x86-Options.html#index-mrecord-return)
+
+mharden-sls=
+UrlSuffix(gcc/x86-Options.html#index-mharden-sls-1)
+
+mavx512bf16
+UrlSuffix(gcc/x86-Options.html#index-mavx512bf16)
+
+menqcmd
+UrlSuffix(gcc/x86-Options.html#index-menqcmd)
+
+mserialize
+UrlSuffix(gcc/x86-Options.html#index-mserialize)
+
+mtsxldtrk
+UrlSuffix(gcc/x86-Options.html#index-mtsxldtrk)
+
+mamx-tile
+UrlSuffix(gcc/x86-Options.html#index-mamx-tile)
+
+mamx-int8
+UrlSuffix(gcc/x86-Options.html#index-mamx-int8)
+
+mamx-bf16
+UrlSuffix(gcc/x86-Options.html#index-mamx-bf16)
+
+mhreset
+UrlSuffix(gcc/x86-Options.html#index-mhreset)
+
+mkl
+UrlSuffix(gcc/x86-Options.html#index-mkl)
+
+mwidekl
+UrlSuffix(gcc/x86-Options.html#index-mwidekl)
+
+mavxvnni
+UrlSuffix(gcc/x86-Options.html#index-mavxvnni)
+
+mneeded
+UrlSuffix(gcc/x86-Options.html#index-mneeded)
+
+mmwait
+UrlSuffix(gcc/x86-Options.html#index-mmwait)
+
+mavx512fp16
+UrlSuffix(gcc/x86-Options.html#index-mavx512fp16)
+
+mdirect-extern-access
+UrlSuffix(gcc/x86-Options.html#index-mdirect-extern-access-1)
+
+mavxifma
+UrlSuffix(gcc/x86-Options.html#index-mavxifma)
+
+mavxvnniint8
+UrlSuffix(gcc/x86-Options.html#index-mavxvnniint8)
+
+mavxneconvert
+UrlSuffix(gcc/x86-Options.html#index-mavxneconvert)
+
+mcmpccxadd
+UrlSuffix(gcc/x86-Options.html#index-mcmpccxadd)
+
+mamx-fp16
+UrlSuffix(gcc/x86-Options.html#index-mamx-fp16)
+
+mprefetchi
+UrlSuffix(gcc/x86-Options.html#index-mprefetchi)
+
+mraoint
+UrlSuffix(gcc/x86-Options.html#index-mraoint)
+
+munroll-only-small-loops
+UrlSuffix(gcc/x86-Options.html#index-munroll-only-small-loops)
+
+mlam=
+UrlSuffix(gcc/x86-Options.html#index-mlam)
+
+mamx-complex
+UrlSuffix(gcc/x86-Options.html#index-mamx-complex)
+
+mavxvnniint16
+UrlSuffix(gcc/x86-Options.html#index-mavxvnniint16)
+
+msm3
+UrlSuffix(gcc/x86-Options.html#index-msm3)
+
+msha512
+UrlSuffix(gcc/x86-Options.html#index-msha512)
+
+msm4
+UrlSuffix(gcc/x86-Options.html#index-msm4)
+
+mapxf
+UrlSuffix(gcc/x86-Options.html#index-mapxf)
+
+musermsr
+UrlSuffix(gcc/x86-Options.html#index-musermsr)
+
+mavx10.1-256
+UrlSuffix(gcc/x86-Options.html#index-mavx10_002e1-256)
+
+mavx10.1-512
+UrlSuffix(gcc/x86-Options.html#index-mavx10_002e1-512)
+
+mavx10.1
+UrlSuffix(gcc/x86-Options.html#index-mavx10_002e1)
+
diff --git a/gcc/config/i386/mingw-w64.opt.urls b/gcc/config/i386/mingw-w64.opt.urls
new file mode 100644
index 0000000..6bb53ef
--- /dev/null
+++ b/gcc/config/i386/mingw-w64.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/mingw-w64.opt and generated HTML
+
+municode
+UrlSuffix(gcc/x86-Windows-Options.html#index-municode)
+
diff --git a/gcc/config/i386/mingw.opt.urls b/gcc/config/i386/mingw.opt.urls
new file mode 100644
index 0000000..2cbbaad
--- /dev/null
+++ b/gcc/config/i386/mingw.opt.urls
@@ -0,0 +1,12 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/mingw.opt and generated HTML
+
+mcrtdll=
+UrlSuffix(gcc/x86-Windows-Options.html#index-mcrtdll)
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+Wpedantic-ms-format
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic-ms-format)
+
diff --git a/gcc/config/i386/nto.opt.urls b/gcc/config/i386/nto.opt.urls
new file mode 100644
index 0000000..37c07a5
--- /dev/null
+++ b/gcc/config/i386/nto.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/nto.opt and generated HTML
+
+G
+UrlSuffix(gcc/System-V-Options.html#index-G-5)
+
diff --git a/gcc/config/ia64/ia64.opt.urls b/gcc/config/ia64/ia64.opt.urls
new file mode 100644
index 0000000..1e1d063
--- /dev/null
+++ b/gcc/config/ia64/ia64.opt.urls
@@ -0,0 +1,122 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/ia64.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/IA-64-Options.html#index-mbig-endian-6)
+
+mlittle-endian
+UrlSuffix(gcc/IA-64-Options.html#index-mlittle-endian-6)
+
+mgnu-as
+UrlSuffix(gcc/IA-64-Options.html#index-mgnu-as)
+
+mgnu-ld
+UrlSuffix(gcc/IA-64-Options.html#index-mgnu-ld-1)
+
+mvolatile-asm-stop
+UrlSuffix(gcc/IA-64-Options.html#index-mvolatile-asm-stop)
+
+mregister-names
+UrlSuffix(gcc/IA-64-Options.html#index-mregister-names)
+
+mno-sdata
+UrlSuffix(gcc/IA-64-Options.html#index-mno-sdata-1)
+
+msdata
+UrlSuffix(gcc/IA-64-Options.html#index-msdata-1)
+
+mno-pic
+UrlSuffix(gcc/IA-64-Options.html#index-mno-pic)
+
+mconstant-gp
+UrlSuffix(gcc/IA-64-Options.html#index-mconstant-gp)
+
+mauto-pic
+UrlSuffix(gcc/IA-64-Options.html#index-mauto-pic)
+
+minline-float-divide-min-latency
+UrlSuffix(gcc/IA-64-Options.html#index-minline-float-divide-min-latency)
+
+minline-float-divide-max-throughput
+UrlSuffix(gcc/IA-64-Options.html#index-minline-float-divide-max-throughput)
+
+mno-inline-float-divide
+UrlSuffix(gcc/IA-64-Options.html#index-mno-inline-float-divide)
+
+minline-int-divide-min-latency
+UrlSuffix(gcc/IA-64-Options.html#index-minline-int-divide-min-latency)
+
+minline-int-divide-max-throughput
+UrlSuffix(gcc/IA-64-Options.html#index-minline-int-divide-max-throughput)
+
+mno-inline-int-divide
+UrlSuffix(gcc/IA-64-Options.html#index-mno-inline-int-divide)
+
+minline-sqrt-min-latency
+UrlSuffix(gcc/IA-64-Options.html#index-minline-sqrt-min-latency)
+
+minline-sqrt-max-throughput
+UrlSuffix(gcc/IA-64-Options.html#index-minline-sqrt-max-throughput)
+
+mno-inline-sqrt
+UrlSuffix(gcc/IA-64-Options.html#index-mno-inline-sqrt)
+
+mdwarf2-asm
+UrlSuffix(gcc/IA-64-Options.html#index-mdwarf2-asm)
+
+mearly-stop-bits
+UrlSuffix(gcc/IA-64-Options.html#index-mearly-stop-bits)
+
+mfixed-range=
+UrlSuffix(gcc/IA-64-Options.html#index-mfixed-range-1)
+
+mtls-size=
+UrlSuffix(gcc/IA-64-Options.html#index-mtls-size-1)
+
+mtune=
+UrlSuffix(gcc/IA-64-Options.html#index-mtune-7)
+
+msched-br-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-br-data-spec)
+
+msched-ar-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-ar-data-spec)
+
+msched-control-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-control-spec)
+
+msched-br-in-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-br-in-data-spec)
+
+msched-ar-in-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-ar-in-data-spec)
+
+msched-in-control-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-in-control-spec)
+
+msched-spec-ldc
+UrlSuffix(gcc/IA-64-Options.html#index-msched-spec-ldc)
+
+msched-prefer-non-data-spec-insns
+UrlSuffix(gcc/IA-64-Options.html#index-msched-prefer-non-data-spec-insns)
+
+msched-prefer-non-control-spec-insns
+UrlSuffix(gcc/IA-64-Options.html#index-msched-prefer-non-control-spec-insns)
+
+msched-count-spec-in-critical-path
+UrlSuffix(gcc/IA-64-Options.html#index-msched-count-spec-in-critical-path)
+
+msched-stop-bits-after-every-cycle
+UrlSuffix(gcc/IA-64-Options.html#index-msched-stop-bits-after-every-cycle)
+
+msched-fp-mem-deps-zero-cost
+UrlSuffix(gcc/IA-64-Options.html#index-msched-fp-mem-deps-zero-cost)
+
+msched-max-memory-insns=
+UrlSuffix(gcc/IA-64-Options.html#index-msched-max-memory-insns)
+
+msched-max-memory-insns-hard-limit
+UrlSuffix(gcc/IA-64-Options.html#index-msched-max-memory-insns-hard-limit)
+
+msel-sched-dont-check-control-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msel-sched-dont-check-control-spec)
+
diff --git a/gcc/config/ia64/ilp32.opt.urls b/gcc/config/ia64/ilp32.opt.urls
new file mode 100644
index 0000000..07bd47d
--- /dev/null
+++ b/gcc/config/ia64/ilp32.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/ilp32.opt and generated HTML
+
+milp32
+UrlSuffix(gcc/IA-64-Options.html#index-milp32)
+
+mlp64
+UrlSuffix(gcc/IA-64-Options.html#index-mlp64)
+
diff --git a/gcc/config/ia64/vms.opt.urls b/gcc/config/ia64/vms.opt.urls
new file mode 100644
index 0000000..e7797d9
--- /dev/null
+++ b/gcc/config/ia64/vms.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/vms.opt and generated HTML
+
diff --git a/gcc/config/iq2000/iq2000.opt.urls b/gcc/config/iq2000/iq2000.opt.urls
new file mode 100644
index 0000000..6aadab6
--- /dev/null
+++ b/gcc/config/iq2000/iq2000.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/iq2000/iq2000.opt and generated HTML
+
+; skipping UrlSuffix for 'march=' due to finding no URLs
+
+; skipping UrlSuffix for 'mcpu=' due to finding no URLs
+
+; skipping UrlSuffix for 'membedded-data' due to finding no URLs
+
+; skipping UrlSuffix for 'mgpopt' due to finding no URLs
+
+; skipping UrlSuffix for 'mno-crt0' due to finding no URLs
+
+; skipping UrlSuffix for 'muninit-const-in-rodata' due to finding no URLs
+
diff --git a/gcc/config/linux-android.opt.urls b/gcc/config/linux-android.opt.urls
new file mode 100644
index 0000000..48d38e9
--- /dev/null
+++ b/gcc/config/linux-android.opt.urls
@@ -0,0 +1,11 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/linux-android.opt and generated HTML
+
+mandroid
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mandroid)
+
+tno-android-cc
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-tno-android-cc)
+
+tno-android-ld
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-tno-android-ld)
+
diff --git a/gcc/config/linux.opt.urls b/gcc/config/linux.opt.urls
new file mode 100644
index 0000000..792a73f
--- /dev/null
+++ b/gcc/config/linux.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/linux.opt and generated HTML
+
+mbionic
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mbionic)
+
+mglibc
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mglibc)
+
+muclibc
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-muclibc)
+
+mmusl
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mmusl)
+
diff --git a/gcc/config/lm32/lm32.opt.urls b/gcc/config/lm32/lm32.opt.urls
new file mode 100644
index 0000000..89c8c47
--- /dev/null
+++ b/gcc/config/lm32/lm32.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/lm32/lm32.opt and generated HTML
+
+mdivide-enabled
+UrlSuffix(gcc/LM32-Options.html#index-mdivide-enabled)
+
+mbarrel-shift-enabled
+UrlSuffix(gcc/LM32-Options.html#index-mbarrel-shift-enabled)
+
+msign-extend-enabled
+UrlSuffix(gcc/LM32-Options.html#index-msign-extend-enabled)
+
+muser-enabled
+UrlSuffix(gcc/LM32-Options.html#index-muser-enabled)
+
diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc
index 91e6bb3..28d6413 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -8825,143 +8825,6 @@ loongarch_expand_vec_perm (rtx target, rtx op0, rtx op1, rtx sel)
}
}
-static bool
-loongarch_is_odd_extraction (struct expand_vec_perm_d *);
-
-static bool
-loongarch_is_even_extraction (struct expand_vec_perm_d *);
-
-static bool
-loongarch_try_expand_lsx_vshuf_const (struct expand_vec_perm_d *d)
-{
- int i;
- rtx target, op0, op1, sel, tmp;
- rtx rperm[MAX_VECT_LEN];
-
- if (d->vmode == E_V2DImode || d->vmode == E_V2DFmode
- || d->vmode == E_V4SImode || d->vmode == E_V4SFmode
- || d->vmode == E_V8HImode || d->vmode == E_V16QImode)
- {
- target = d->target;
- op0 = d->op0;
- op1 = d->one_vector_p ? d->op0 : d->op1;
-
- if (GET_MODE (op0) != GET_MODE (op1)
- || GET_MODE (op0) != GET_MODE (target))
- return false;
-
- if (d->testing_p)
- return true;
-
- /* If match extract-even and extract-odd permutations pattern, use
- * vselect much better than vshuf. */
- if (loongarch_is_odd_extraction (d)
- || loongarch_is_even_extraction (d))
- {
- if (loongarch_expand_vselect_vconcat (d->target, d->op0, d->op1,
- d->perm, d->nelt))
- return true;
-
- unsigned char perm2[MAX_VECT_LEN];
- for (i = 0; i < d->nelt; ++i)
- perm2[i] = (d->perm[i] + d->nelt) & (2 * d->nelt - 1);
-
- if (loongarch_expand_vselect_vconcat (d->target, d->op1, d->op0,
- perm2, d->nelt))
- return true;
- }
-
- for (i = 0; i < d->nelt; i += 1)
- {
- rperm[i] = GEN_INT (d->perm[i]);
- }
-
- if (d->vmode == E_V2DFmode)
- {
- sel = gen_rtx_CONST_VECTOR (E_V2DImode, gen_rtvec_v (d->nelt, rperm));
- tmp = simplify_gen_subreg (E_V2DImode, d->target, d->vmode, 0);
- emit_move_insn (tmp, sel);
- }
- else if (d->vmode == E_V4SFmode)
- {
- sel = gen_rtx_CONST_VECTOR (E_V4SImode, gen_rtvec_v (d->nelt, rperm));
- tmp = simplify_gen_subreg (E_V4SImode, d->target, d->vmode, 0);
- emit_move_insn (tmp, sel);
- }
- else
- {
- sel = gen_rtx_CONST_VECTOR (d->vmode, gen_rtvec_v (d->nelt, rperm));
- emit_move_insn (d->target, sel);
- }
-
- switch (d->vmode)
- {
- case E_V2DFmode:
- emit_insn (gen_lsx_vshuf_d_f (target, target, op1, op0));
- break;
- case E_V2DImode:
- emit_insn (gen_lsx_vshuf_d (target, target, op1, op0));
- break;
- case E_V4SFmode:
- emit_insn (gen_lsx_vshuf_w_f (target, target, op1, op0));
- break;
- case E_V4SImode:
- emit_insn (gen_lsx_vshuf_w (target, target, op1, op0));
- break;
- case E_V8HImode:
- emit_insn (gen_lsx_vshuf_h (target, target, op1, op0));
- break;
- case E_V16QImode:
- emit_insn (gen_lsx_vshuf_b (target, op1, op0, target));
- break;
- default:
- break;
- }
-
- return true;
- }
- return false;
-}
-
-static bool
-loongarch_expand_vec_perm_const_1 (struct expand_vec_perm_d *d)
-{
- unsigned int i, nelt = d->nelt;
- unsigned char perm2[MAX_VECT_LEN];
-
- if (d->one_vector_p)
- {
- /* Try interleave with alternating operands. */
- memcpy (perm2, d->perm, sizeof (perm2));
- for (i = 1; i < nelt; i += 2)
- perm2[i] += nelt;
- if (loongarch_expand_vselect_vconcat (d->target, d->op0, d->op1, perm2,
- nelt))
- return true;
- }
- else
- {
- if (loongarch_expand_vselect_vconcat (d->target, d->op0, d->op1,
- d->perm, nelt))
- return true;
-
- /* Try again with swapped operands. */
- for (i = 0; i < nelt; ++i)
- perm2[i] = (d->perm[i] + nelt) & (2 * nelt - 1);
- if (loongarch_expand_vselect_vconcat (d->target, d->op1, d->op0, perm2,
- nelt))
- return true;
- }
-
- if (loongarch_expand_lsx_shuffle (d))
- return true;
- if (loongarch_expand_vec_perm_even_odd (d))
- return true;
- if (loongarch_expand_vec_perm_interleave (d))
- return true;
- return false;
-}
-
/* Following are the assist function for const vector permutation support. */
static bool
loongarch_is_quad_duplicate (struct expand_vec_perm_d *d)
@@ -8994,36 +8857,6 @@ loongarch_is_quad_duplicate (struct expand_vec_perm_d *d)
}
static bool
-loongarch_is_double_duplicate (struct expand_vec_perm_d *d)
-{
- if (!d->one_vector_p)
- return false;
-
- if (d->nelt < 8)
- return false;
-
- bool result = true;
- unsigned char buf = d->perm[0];
-
- for (int i = 1; i < d->nelt; i += 2)
- {
- if (d->perm[i] != buf)
- {
- result = false;
- break;
- }
- if (d->perm[i - 1] != d->perm[i])
- {
- result = false;
- break;
- }
- buf += d->nelt / 4;
- }
-
- return result;
-}
-
-static bool
loongarch_is_odd_extraction (struct expand_vec_perm_d *d)
{
bool result = true;
@@ -9084,110 +8917,6 @@ loongarch_is_extraction_permutation (struct expand_vec_perm_d *d)
}
static bool
-loongarch_is_center_extraction (struct expand_vec_perm_d *d)
-{
- bool result = true;
- unsigned buf = d->nelt / 2;
-
- for (int i = 0; i < d->nelt; i += 1)
- {
- if (buf != d->perm[i])
- {
- result = false;
- break;
- }
- buf += 1;
- }
-
- return result;
-}
-
-static bool
-loongarch_is_reversing_permutation (struct expand_vec_perm_d *d)
-{
- if (!d->one_vector_p)
- return false;
-
- bool result = true;
- unsigned char buf = d->nelt - 1;
-
- for (int i = 0; i < d->nelt; i += 1)
- {
- if (d->perm[i] != buf)
- {
- result = false;
- break;
- }
-
- buf -= 1;
- }
-
- return result;
-}
-
-static bool
-loongarch_is_di_misalign_extract (struct expand_vec_perm_d *d)
-{
- if (d->nelt != 4 && d->nelt != 8)
- return false;
-
- bool result = true;
- unsigned char buf;
-
- if (d->nelt == 4)
- {
- buf = 1;
- for (int i = 0; i < d->nelt; i += 1)
- {
- if (buf != d->perm[i])
- {
- result = false;
- break;
- }
-
- buf += 1;
- }
- }
- else if (d->nelt == 8)
- {
- buf = 2;
- for (int i = 0; i < d->nelt; i += 1)
- {
- if (buf != d->perm[i])
- {
- result = false;
- break;
- }
-
- buf += 1;
- }
- }
-
- return result;
-}
-
-static bool
-loongarch_is_si_misalign_extract (struct expand_vec_perm_d *d)
-{
- if (d->vmode != E_V8SImode && d->vmode != E_V8SFmode)
- return false;
- bool result = true;
- unsigned char buf = 1;
-
- for (int i = 0; i < d->nelt; i += 1)
- {
- if (buf != d->perm[i])
- {
- result = false;
- break;
- }
- buf += 1;
- }
-
- return result;
-}
-
-static bool
loongarch_is_lasx_lowpart_interleave (struct expand_vec_perm_d *d)
{
bool result = true;
@@ -9250,39 +8979,6 @@ loongarch_is_lasx_lowpart_interleave_2 (struct expand_vec_perm_d *d)
}
static bool
-loongarch_is_lasx_lowpart_extract (struct expand_vec_perm_d *d)
-{
- bool result = true;
- unsigned char buf = 0;
-
- for (int i = 0; i < d->nelt / 2; i += 1)
- {
- if (buf != d->perm[i])
- {
- result = false;
- break;
- }
- buf += 1;
- }
-
- if (result)
- {
- buf = d->nelt;
- for (int i = d->nelt / 2; i < d->nelt; i += 1)
- {
- if (buf != d->perm[i])
- {
- result = false;
- break;
- }
- buf += 1;
- }
- }
-
- return result;
-}
-
-static bool
loongarch_is_lasx_highpart_interleave (expand_vec_perm_d *d)
{
bool result = true;
@@ -9363,538 +9059,195 @@ loongarch_is_elem_duplicate (struct expand_vec_perm_d *d)
return result;
}
-inline bool
-loongarch_is_op_reverse_perm (struct expand_vec_perm_d *d)
-{
- return (d->vmode == E_V4DFmode)
- && d->perm[0] == 2 && d->perm[1] == 3
- && d->perm[2] == 0 && d->perm[3] == 1;
-}
-
-static bool
-loongarch_is_single_op_perm (struct expand_vec_perm_d *d)
-{
- bool result = true;
-
- for (int i = 0; i < d->nelt; i += 1)
- {
- if (d->perm[i] >= d->nelt)
- {
- result = false;
- break;
- }
- }
-
- return result;
-}
-
-static bool
-loongarch_is_divisible_perm (struct expand_vec_perm_d *d)
-{
- bool result = true;
-
- for (int i = 0; i < d->nelt / 2; i += 1)
- {
- if (d->perm[i] >= d->nelt)
- {
- result = false;
- break;
- }
- }
-
- if (result)
- {
- for (int i = d->nelt / 2; i < d->nelt; i += 1)
- {
- if (d->perm[i] < d->nelt)
- {
- result = false;
- break;
- }
- }
- }
-
- return result;
-}
-
-inline bool
-loongarch_is_triple_stride_extract (struct expand_vec_perm_d *d)
-{
- return (d->vmode == E_V4DImode || d->vmode == E_V4DFmode)
- && d->perm[0] == 1 && d->perm[1] == 4
- && d->perm[2] == 7 && d->perm[3] == 0;
-}
-
/* In LASX, some permutation insn does not have the behavior that gcc expects
- * when compiler wants to emit a vector permutation.
- *
- * 1. What GCC provides via vectorize_vec_perm_const ()'s paramater:
- * When GCC wants to performs a vector permutation, it provides two op
- * reigster, one target register, and a selector.
- * In const vector permutation case, GCC provides selector as a char array
- * that contains original value; in variable vector permuatation
- * (performs via vec_perm<mode> insn template), it provides a vector register.
- * We assume that nelt is the elements numbers inside single vector in current
- * 256bit vector mode.
- *
- * 2. What GCC expects to perform:
- * Two op registers (op0, op1) will "combine" into a 512bit temp vector storage
- * that has 2*nelt elements inside it; the low 256bit is op0, and high 256bit
- * is op1, then the elements are indexed as below:
- * 0 ~ nelt - 1 nelt ~ 2 * nelt - 1
- * |-------------------------|-------------------------|
- * Low 256bit (op0) High 256bit (op1)
- * For example, the second element in op1 (V8SImode) will be indexed with 9.
- * Selector is a vector that has the same mode and number of elements with
- * op0,op1 and target, it's look like this:
- * 0 ~ nelt - 1
- * |-------------------------|
- * 256bit (selector)
- * It describes which element from 512bit temp vector storage will fit into
- * target's every element slot.
- * GCC expects that every element in selector can be ANY indices of 512bit
- * vector storage (Selector can pick literally any element from op0 and op1, and
- * then fits into any place of target register). This is also what LSX 128bit
- * vshuf.* instruction do similarly, so we can handle 128bit vector permutation
- * by single instruction easily.
- *
- * 3. What LASX permutation instruction does:
- * In short, it just execute two independent 128bit vector permuatation, and
- * it's the reason that we need to do the jobs below. We will explain it.
- * op0, op1, target, and selector will be separate into high 128bit and low
- * 128bit, and do permutation as the description below:
- *
- * a) op0's low 128bit and op1's low 128bit "combines" into a 256bit temp
- * vector storage (TVS1), elements are indexed as below:
- * 0 ~ nelt / 2 - 1 nelt / 2 ~ nelt - 1
- * |---------------------|---------------------| TVS1
- * op0's low 128bit op1's low 128bit
- * op0's high 128bit and op1's high 128bit are "combined" into TVS2 in the
- * same way.
- * 0 ~ nelt / 2 - 1 nelt / 2 ~ nelt - 1
- * |---------------------|---------------------| TVS2
- * op0's high 128bit op1's high 128bit
- * b) Selector's low 128bit describes which elements from TVS1 will fit into
- * target vector's low 128bit. No TVS2 elements are allowed.
- * c) Selector's high 128bit describes which elements from TVS2 will fit into
- * target vector's high 128bit. No TVS1 elements are allowed.
- *
- * As we can see, if we want to handle vector permutation correctly, we can
- * achieve it in three ways:
- * a) Modify selector's elements, to make sure that every elements can inform
- * correct value that will put into target vector.
- b) Generate extra instruction before/after permutation instruction, for
- adjusting op vector or target vector, to make sure target vector's value is
- what GCC expects.
- c) Use other instructions to process op and put correct result into target.
- */
+ when compiler wants to emit a vector permutation.
+
+ 1. What GCC provides via vectorize_vec_perm_const ()'s paramater:
+ When GCC wants to performs a vector permutation, it provides two op
+ reigster, one target register, and a selector.
+ In const vector permutation case, GCC provides selector as a char array
+ that contains original value; in variable vector permuatation
+ (performs via vec_perm<mode> insn template), it provides a vector register.
+ We assume that nelt is the elements numbers inside single vector in current
+ 256bit vector mode.
+
+ 2. What GCC expects to perform:
+ Two op registers (op0, op1) will "combine" into a 512bit temp vector storage
+ that has 2*nelt elements inside it; the low 256bit is op0, and high 256bit
+ is op1, then the elements are indexed as below:
+ 0 ~ nelt - 1 nelt ~ 2 * nelt - 1
+ |-------------------------|-------------------------|
+ Low 256bit (op0) High 256bit (op1)
+ For example, the second element in op1 (V8SImode) will be indexed with 9.
+ Selector is a vector that has the same mode and number of elements with
+ op0,op1 and target, it's look like this:
+ 0 ~ nelt - 1
+ |-------------------------|
+ 256bit (selector)
+ It describes which element from 512bit temp vector storage will fit into
+ target's every element slot.
+ GCC expects that every element in selector can be ANY indices of 512bit
+ vector storage (Selector can pick literally any element from op0 and op1, and
+ then fits into any place of target register). This is also what LSX 128bit
+ vshuf.* instruction do similarly, so we can handle 128bit vector permutation
+ by single instruction easily.
+
+ 3. What LASX permutation instruction does:
+ In short, it just execute two independent 128bit vector permuatation, and
+ it's the reason that we need to do the jobs below. We will explain it.
+ op0, op1, target, and selector will be separate into high 128bit and low
+ 128bit, and do permutation as the description below:
+
+ a) op0's low 128bit and op1's low 128bit "combines" into a 256bit temp
+ vector storage (TVS1), elements are indexed as below:
+ 0 ~ nelt / 2 - 1 nelt / 2 ~ nelt - 1
+ |---------------------|---------------------| TVS1
+ op0's low 128bit op1's low 128bit
+ op0's high 128bit and op1's high 128bit are "combined" into TVS2 in the
+ same way.
+ 0 ~ nelt / 2 - 1 nelt / 2 ~ nelt - 1
+ |---------------------|---------------------| TVS2
+ op0's high 128bit op1's high 128bit
+ b) Selector's low 128bit describes which elements from TVS1 will fit into
+ target vector's low 128bit. No TVS2 elements are allowed.
+ c) Selector's high 128bit describes which elements from TVS2 will fit into
+ target vector's high 128bit. No TVS1 elements are allowed.
+
+ As we can see, if we want to handle vector permutation correctly, we can
+ achieve it in three ways:
+ a) Modify selector's elements, to make sure that every elements can inform
+ correct value that will put into target vector.
+ b) Generate extra instruction before/after permutation instruction, for
+ adjusting op vector or target vector, to make sure target vector's value is
+ what GCC expects.
+ c) Use other instructions to process op and put correct result into target.
+ */
/* Implementation of constant vector permuatation. This function identifies
- * recognized pattern of permuation selector argument, and use one or more
- * instruction(s) to finish the permutation job correctly. For unsupported
- * patterns, it will return false. */
+ recognized pattern of permuation selector argument, and use one or more
+ instruction (s) to finish the permutation job correctly. For unsupported
+ patterns, it will return false. */
static bool
-loongarch_expand_vec_perm_const_2 (struct expand_vec_perm_d *d)
+loongarch_expand_vec_perm_const (struct expand_vec_perm_d *d)
{
- /* Although we have the LSX vec_perm<mode> template, there's still some
- 128bit vector permuatation operations send to vectorize_vec_perm_const.
- In this case, we just simpliy wrap them by single vshuf.* instruction,
- because LSX vshuf.* instruction just have the same behavior that GCC
- expects. */
- if (GET_MODE_SIZE (d->vmode) == 16)
- return loongarch_try_expand_lsx_vshuf_const (d);
- else
- return false;
-
- bool ok = false, reverse_hi_lo = false, extract_ev_od = false,
- use_alt_op = false;
+ bool flag = false;
+ unsigned int i;
unsigned char idx;
- int i;
rtx target, op0, op1, sel, tmp;
- rtx op0_alt = NULL_RTX, op1_alt = NULL_RTX;
rtx rperm[MAX_VECT_LEN];
unsigned int remapped[MAX_VECT_LEN];
+ unsigned char perm2[MAX_VECT_LEN];
- /* Try to figure out whether is a recognized permutation selector pattern, if
- yes, we will reassign some elements with new value in selector argument,
- and in some cases we will generate some assist insn to complete the
- permutation. (Even in some cases, we use other insn to impl permutation
- instead of xvshuf!)
-
- Make sure to check d->testing_p is false everytime if you want to emit new
- insn, unless you want to crash into ICE directly. */
- if (loongarch_is_quad_duplicate (d))
+ if (GET_MODE_SIZE (d->vmode) == 16)
+ return loongarch_expand_lsx_shuffle (d);
+ else
{
- /* Selector example: E_V8SImode, { 0, 0, 0, 0, 4, 4, 4, 4 }
- copy first elem from original selector to all elem in new selector. */
- idx = d->perm[0];
- for (i = 0; i < d->nelt; i += 1)
+ if (d->one_vector_p)
{
- remapped[i] = idx;
+ /* Try interleave with alternating operands. */
+ memcpy (perm2, d->perm, sizeof (perm2));
+ for (i = 1; i < d->nelt; i += 2)
+ perm2[i] += d->nelt;
+ if (loongarch_expand_vselect_vconcat (d->target, d->op0, d->op1,
+ perm2, d->nelt))
+ return true;
}
- /* Selector after: { 0, 0, 0, 0, 0, 0, 0, 0 }. */
- }
- else if (loongarch_is_double_duplicate (d))
- {
- /* Selector example: E_V8SImode, { 1, 1, 3, 3, 5, 5, 7, 7 }
- one_vector_p == true. */
- for (i = 0; i < d->nelt / 2; i += 1)
+ else
{
- idx = d->perm[i];
- remapped[i] = idx;
- remapped[i + d->nelt / 2] = idx;
+ if (loongarch_expand_vselect_vconcat (d->target, d->op0, d->op1,
+ d->perm, d->nelt))
+ return true;
+
+ /* Try again with swapped operands. */
+ for (i = 0; i < d->nelt; ++i)
+ perm2[i] = (d->perm[i] + d->nelt) & (2 * d->nelt - 1);
+ if (loongarch_expand_vselect_vconcat (d->target, d->op1, d->op0,
+ perm2, d->nelt))
+ return true;
}
- /* Selector after: { 1, 1, 3, 3, 1, 1, 3, 3 }. */
- }
- else if (loongarch_is_odd_extraction (d)
- || loongarch_is_even_extraction (d))
- {
- /* Odd extraction selector sample: E_V4DImode, { 1, 3, 5, 7 }
- Selector after: { 1, 3, 1, 3 }.
- Even extraction selector sample: E_V4DImode, { 0, 2, 4, 6 }
- Selector after: { 0, 2, 0, 2 }. */
- /* Better implement of extract-even and extract-odd permutations. */
- if (loongarch_expand_vec_perm_even_odd (d))
+ if (loongarch_expand_lsx_shuffle (d))
return true;
- for (i = 0; i < d->nelt / 2; i += 1)
+ if (loongarch_is_odd_extraction (d)
+ || loongarch_is_even_extraction (d))
{
- idx = d->perm[i];
- remapped[i] = idx;
- remapped[i + d->nelt / 2] = idx;
+ if (loongarch_expand_vec_perm_even_odd (d))
+ return true;
}
- /* Additional insn is required for correct result. See codes below. */
- extract_ev_od = true;
- }
- else if (loongarch_is_extraction_permutation (d))
- {
- /* Selector sample: E_V8SImode, { 0, 1, 2, 3, 4, 5, 6, 7 }. */
- if (d->perm[0] == 0)
+
+ if (loongarch_is_lasx_lowpart_interleave (d)
+ || loongarch_is_lasx_lowpart_interleave_2 (d)
+ || loongarch_is_lasx_highpart_interleave (d)
+ || loongarch_is_lasx_highpart_interleave_2 (d))
{
- for (i = 0; i < d->nelt / 2; i += 1)
- {
- remapped[i] = i;
- remapped[i + d->nelt / 2] = i;
- }
+ if (loongarch_expand_vec_perm_interleave (d))
+ return true;
}
- else
+
+ if (loongarch_is_quad_duplicate (d))
{
- /* { 8, 9, 10, 11, 12, 13, 14, 15 }. */
- for (i = 0; i < d->nelt / 2; i += 1)
+ if (d->testing_p)
+ return true;
+ /* Selector example: E_V8SImode, { 0, 0, 0, 0, 4, 4, 4, 4 }. */
+ for (i = 0; i < d->nelt; i += 1)
{
- idx = i + d->nelt / 2;
- remapped[i] = idx;
- remapped[i + d->nelt / 2] = idx;
+ rperm[i] = GEN_INT (d->perm[0]);
}
+ /* Selector after: { 0, 0, 0, 0, 0, 0, 0, 0 }. */
+ flag = true;
+ goto expand_perm_const_end;
}
- /* Selector after: { 0, 1, 2, 3, 0, 1, 2, 3 }
- { 8, 9, 10, 11, 8, 9, 10, 11 } */
- }
- else if (loongarch_is_center_extraction (d))
- {
- /* sample: E_V4DImode, { 2, 3, 4, 5 }
- In this condition, we can just copy high 128bit of op0 and low 128bit
- of op1 to the target register by using xvpermi.q insn. */
- if (!d->testing_p)
- {
- emit_move_insn (d->target, d->op1);
- switch (d->vmode)
- {
- case E_V4DImode:
- emit_insn (gen_lasx_xvpermi_q_v4di (d->target, d->target,
- d->op0, GEN_INT (0x21)));
- break;
- case E_V4DFmode:
- emit_insn (gen_lasx_xvpermi_q_v4df (d->target, d->target,
- d->op0, GEN_INT (0x21)));
- break;
- case E_V8SImode:
- emit_insn (gen_lasx_xvpermi_q_v8si (d->target, d->target,
- d->op0, GEN_INT (0x21)));
- break;
- case E_V8SFmode:
- emit_insn (gen_lasx_xvpermi_q_v8sf (d->target, d->target,
- d->op0, GEN_INT (0x21)));
- break;
- case E_V16HImode:
- emit_insn (gen_lasx_xvpermi_q_v16hi (d->target, d->target,
- d->op0, GEN_INT (0x21)));
- break;
- case E_V32QImode:
- emit_insn (gen_lasx_xvpermi_q_v32qi (d->target, d->target,
- d->op0, GEN_INT (0x21)));
- break;
- default:
- break;
- }
- }
- ok = true;
- /* Finish the funtion directly. */
- goto expand_perm_const_2_end;
- }
- else if (loongarch_is_reversing_permutation (d))
- {
- /* Selector sample: E_V8SImode, { 7, 6, 5, 4, 3, 2, 1, 0 }
- one_vector_p == true */
- idx = d->nelt / 2 - 1;
- for (i = 0; i < d->nelt / 2; i += 1)
- {
- remapped[i] = idx;
- remapped[i + d->nelt / 2] = idx;
- idx -= 1;
- }
- /* Selector after: { 3, 2, 1, 0, 3, 2, 1, 0 }
- Additional insn will be generated to swap hi and lo 128bit of target
- register. */
- reverse_hi_lo = true;
- }
- else if (loongarch_is_di_misalign_extract (d)
- || loongarch_is_si_misalign_extract (d))
- {
- /* Selector Sample:
- DI misalign: E_V4DImode, { 1, 2, 3, 4 }
- SI misalign: E_V8SImode, { 1, 2, 3, 4, 5, 6, 7, 8 } */
- if (!d->testing_p)
- {
- /* Copy original op0/op1 value to new temp register.
- In some cases, operand register may be used in multiple place, so
- we need new regiter instead modify original one, to avoid runtime
- crashing or wrong value after execution. */
- use_alt_op = true;
- op1_alt = gen_reg_rtx (d->vmode);
- emit_move_insn (op1_alt, d->op1);
- /* Adjust op1 for selecting correct value in high 128bit of target
- register.
- op1: E_V4DImode, { 4, 5, 6, 7 } -> { 2, 3, 4, 5 }. */
- rtx conv_op1 = simplify_gen_subreg (E_V4DImode, op1_alt, d->vmode, 0);
- rtx conv_op0 = simplify_gen_subreg (E_V4DImode, d->op0, d->vmode, 0);
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op1, conv_op1,
- conv_op0, GEN_INT (0x21)));
-
- for (i = 0; i < d->nelt / 2; i += 1)
- {
- remapped[i] = d->perm[i];
- remapped[i + d->nelt / 2] = d->perm[i];
- }
- /* Selector after:
- DI misalign: { 1, 2, 1, 2 }
- SI misalign: { 1, 2, 3, 4, 1, 2, 3, 4 } */
- }
- }
- else if (loongarch_is_lasx_lowpart_interleave (d))
- {
- /* Elements from op0's low 18bit and op1's 128bit are inserted into
- target register alternately.
- sample: E_V4DImode, { 0, 4, 1, 5 } */
- if (!d->testing_p)
- {
- /* Prepare temp register instead of modify original op. */
- use_alt_op = true;
- op1_alt = gen_reg_rtx (d->vmode);
- op0_alt = gen_reg_rtx (d->vmode);
- emit_move_insn (op1_alt, d->op1);
- emit_move_insn (op0_alt, d->op0);
-
- /* Generate subreg for fitting into insn gen function. */
- rtx conv_op1 = simplify_gen_subreg (E_V4DImode, op1_alt, d->vmode, 0);
- rtx conv_op0 = simplify_gen_subreg (E_V4DImode, op0_alt, d->vmode, 0);
-
- /* Adjust op value in temp register.
- op0 = {0,1,2,3}, op1 = {4,5,0,1} */
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op1, conv_op1,
- conv_op0, GEN_INT (0x02)));
- /* op0 = {0,1,4,5}, op1 = {4,5,0,1} */
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op0, conv_op0,
- conv_op1, GEN_INT (0x01)));
-
- /* Remap indices in selector based on the location of index inside
- selector, and vector element numbers in current vector mode. */
-
- /* Filling low 128bit of new selector. */
- for (i = 0; i < d->nelt / 2; i += 1)
- {
- /* value in odd-indexed slot of low 128bit part of selector
- vector. */
- remapped[i] = i % 2 != 0 ? d->perm[i] - d->nelt / 2 : d->perm[i];
- }
- /* Then filling the high 128bit. */
- for (i = d->nelt / 2; i < d->nelt; i += 1)
+ if (loongarch_is_extraction_permutation (d))
+ {
+ if (d->testing_p)
+ return true;
+ /* Selector sample: E_V8SImode, { 0, 1, 2, 3, 4, 5, 6, 7 }. */
+ if (d->perm[0] == 0)
{
- /* value in even-indexed slot of high 128bit part of
- selector vector. */
- remapped[i] = i % 2 == 0
- ? d->perm[i] + (d->nelt / 2) * 3 : d->perm[i];
+ for (i = 0; i < d->nelt / 2; i += 1)
+ {
+ remapped[i] = i;
+ remapped[i + d->nelt / 2] = i;
+ }
}
- }
- }
- else if (loongarch_is_lasx_lowpart_interleave_2 (d))
- {
- /* Special lowpart interleave case in V32QI vector mode. It does the same
- thing as we can see in if branch that above this line.
- Selector sample: E_V32QImode,
- {0, 1, 2, 3, 4, 5, 6, 7, 32, 33, 34, 35, 36, 37, 38, 39, 8,
- 9, 10, 11, 12, 13, 14, 15, 40, 41, 42, 43, 44, 45, 46, 47} */
- if (!d->testing_p)
- {
- /* Solution for this case in very simple - covert op into V4DI mode,
- and do same thing as previous if branch. */
- op1_alt = gen_reg_rtx (d->vmode);
- op0_alt = gen_reg_rtx (d->vmode);
- emit_move_insn (op1_alt, d->op1);
- emit_move_insn (op0_alt, d->op0);
-
- rtx conv_op1 = simplify_gen_subreg (E_V4DImode, op1_alt, d->vmode, 0);
- rtx conv_op0 = simplify_gen_subreg (E_V4DImode, op0_alt, d->vmode, 0);
- rtx conv_target = simplify_gen_subreg (E_V4DImode, d->target,
- d->vmode, 0);
-
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op1, conv_op1,
- conv_op0, GEN_INT (0x02)));
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op0, conv_op0,
- conv_op1, GEN_INT (0x01)));
- remapped[0] = 0;
- remapped[1] = 4;
- remapped[2] = 1;
- remapped[3] = 5;
-
- for (i = 0; i < d->nelt; i += 1)
+ else
{
- rperm[i] = GEN_INT (remapped[i]);
+ /* { 8, 9, 10, 11, 12, 13, 14, 15 }. */
+ for (i = 0; i < d->nelt / 2; i += 1)
+ {
+ idx = i + d->nelt / 2;
+ remapped[i] = idx;
+ remapped[i + d->nelt / 2] = idx;
+ }
}
+ /* Selector after: { 0, 1, 2, 3, 0, 1, 2, 3 }
+ { 8, 9, 10, 11, 8, 9, 10, 11 } */
- sel = gen_rtx_CONST_VECTOR (E_V4DImode, gen_rtvec_v (4, rperm));
- sel = force_reg (E_V4DImode, sel);
- emit_insn (gen_lasx_xvshuf_d (conv_target, sel,
- conv_op1, conv_op0));
- }
-
- ok = true;
- goto expand_perm_const_2_end;
- }
- else if (loongarch_is_lasx_lowpart_extract (d))
- {
- /* Copy op0's low 128bit to target's low 128bit, and copy op1's low
- 128bit to target's high 128bit.
- Selector sample: E_V4DImode, { 0, 1, 4 ,5 } */
- if (!d->testing_p)
- {
- rtx conv_op1 = simplify_gen_subreg (E_V4DImode, d->op1, d->vmode, 0);
- rtx conv_op0 = simplify_gen_subreg (E_V4DImode, d->op0, d->vmode, 0);
- rtx conv_target = simplify_gen_subreg (E_V4DImode, d->target,
- d->vmode, 0);
-
- /* We can achieve the expectation by using sinple xvpermi.q insn. */
- emit_move_insn (conv_target, conv_op1);
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_target, conv_target,
- conv_op0, GEN_INT (0x20)));
- }
-
- ok = true;
- goto expand_perm_const_2_end;
- }
- else if (loongarch_is_lasx_highpart_interleave (d))
- {
- /* Similar to lowpart interleave, elements from op0's high 128bit and
- op1's high 128bit are inserted into target regiter alternately.
- Selector sample: E_V8SImode, { 4, 12, 5, 13, 6, 14, 7, 15 } */
- if (!d->testing_p)
- {
- /* Prepare temp op register. */
- use_alt_op = true;
- op1_alt = gen_reg_rtx (d->vmode);
- op0_alt = gen_reg_rtx (d->vmode);
- emit_move_insn (op1_alt, d->op1);
- emit_move_insn (op0_alt, d->op0);
-
- rtx conv_op1 = simplify_gen_subreg (E_V4DImode, op1_alt, d->vmode, 0);
- rtx conv_op0 = simplify_gen_subreg (E_V4DImode, op0_alt, d->vmode, 0);
- /* Adjust op value in temp regiter.
- op0 = { 0, 1, 2, 3 }, op1 = { 6, 7, 2, 3 } */
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op1, conv_op1,
- conv_op0, GEN_INT (0x13)));
- /* op0 = { 2, 3, 6, 7 }, op1 = { 6, 7, 2, 3 } */
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op0, conv_op0,
- conv_op1, GEN_INT (0x01)));
- /* Remap indices in selector based on the location of index inside
- selector, and vector element numbers in current vector mode. */
-
- /* Filling low 128bit of new selector. */
- for (i = 0; i < d->nelt / 2; i += 1)
- {
- /* value in even-indexed slot of low 128bit part of selector
- vector. */
- remapped[i] = i % 2 == 0 ? d->perm[i] - d->nelt / 2 : d->perm[i];
- }
- /* Then filling the high 128bit. */
- for (i = d->nelt / 2; i < d->nelt; i += 1)
- {
- /* value in odd-indexed slot of high 128bit part of selector
- vector. */
- remapped[i] = i % 2 != 0
- ? d->perm[i] - (d->nelt / 2) * 3 : d->perm[i];
- }
- }
- }
- else if (loongarch_is_lasx_highpart_interleave_2 (d))
- {
- /* Special highpart interleave case in V32QI vector mode. It does the
- same thing as the normal version above.
- Selector sample: E_V32QImode,
- {16, 17, 18, 19, 20, 21, 22, 23, 48, 49, 50, 51, 52, 53, 54, 55,
- 24, 25, 26, 27, 28, 29, 30, 31, 56, 57, 58, 59, 60, 61, 62, 63}
- */
- if (!d->testing_p)
- {
- /* Convert op into V4DImode and do the things. */
- op1_alt = gen_reg_rtx (d->vmode);
- op0_alt = gen_reg_rtx (d->vmode);
- emit_move_insn (op1_alt, d->op1);
- emit_move_insn (op0_alt, d->op0);
-
- rtx conv_op1 = simplify_gen_subreg (E_V4DImode, op1_alt, d->vmode, 0);
- rtx conv_op0 = simplify_gen_subreg (E_V4DImode, op0_alt, d->vmode, 0);
- rtx conv_target = simplify_gen_subreg (E_V4DImode, d->target,
- d->vmode, 0);
-
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op1, conv_op1,
- conv_op0, GEN_INT (0x13)));
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op0, conv_op0,
- conv_op1, GEN_INT (0x01)));
- remapped[0] = 2;
- remapped[1] = 6;
- remapped[2] = 3;
- remapped[3] = 7;
-
+ /* Convert remapped selector array to RTL array. */
for (i = 0; i < d->nelt; i += 1)
{
rperm[i] = GEN_INT (remapped[i]);
}
- sel = gen_rtx_CONST_VECTOR (E_V4DImode, gen_rtvec_v (4, rperm));
- sel = force_reg (E_V4DImode, sel);
- emit_insn (gen_lasx_xvshuf_d (conv_target, sel,
- conv_op1, conv_op0));
+ flag = true;
+ goto expand_perm_const_end;
}
- ok = true;
- goto expand_perm_const_2_end;
- }
- else if (loongarch_is_elem_duplicate (d))
- {
- /* Brocast single element (from op0 or op1) to all slot of target
- register.
- Selector sample:E_V8SImode, { 2, 2, 2, 2, 2, 2, 2, 2 } */
- if (!d->testing_p)
+ if (loongarch_is_elem_duplicate (d))
{
+ if (d->testing_p)
+ return true;
+ /* Brocast single element (from op0 or op1) to all slot of target
+ register.
+ Selector sample:E_V8SImode, { 2, 2, 2, 2, 2, 2, 2, 2 } */
rtx conv_op1 = simplify_gen_subreg (E_V4DImode, d->op1, d->vmode, 0);
rtx conv_op0 = simplify_gen_subreg (E_V4DImode, d->op0, d->vmode, 0);
rtx temp_reg = gen_reg_rtx (d->vmode);
rtx conv_temp = simplify_gen_subreg (E_V4DImode, temp_reg,
d->vmode, 0);
-
emit_move_insn (temp_reg, d->op0);
idx = d->perm[0];
@@ -9903,7 +9256,7 @@ loongarch_expand_vec_perm_const_2 (struct expand_vec_perm_d *d)
value that we need to broardcast, because xvrepl128vei does the
broardcast job from every 128bit of source register to
corresponded part of target register! (A deep sigh.) */
- if (/*idx >= 0 &&*/ idx < d->nelt / 2)
+ if (idx < d->nelt / 2)
{
emit_insn (gen_lasx_xvpermi_q_v4di (conv_temp, conv_temp,
conv_op0, GEN_INT (0x0)));
@@ -9958,310 +9311,75 @@ loongarch_expand_vec_perm_const_2 (struct expand_vec_perm_d *d)
break;
}
- /* finish func directly. */
- ok = true;
- goto expand_perm_const_2_end;
- }
- }
- else if (loongarch_is_op_reverse_perm (d))
- {
- /* reverse high 128bit and low 128bit in op0.
- Selector sample: E_V4DFmode, { 2, 3, 0, 1 }
- Use xvpermi.q for doing this job. */
- if (!d->testing_p)
- {
- if (d->vmode == E_V4DImode)
- {
- emit_insn (gen_lasx_xvpermi_q_v4di (d->target, d->target, d->op0,
- GEN_INT (0x01)));
- }
- else if (d->vmode == E_V4DFmode)
- {
- emit_insn (gen_lasx_xvpermi_q_v4df (d->target, d->target, d->op0,
- GEN_INT (0x01)));
- }
- else
- {
- gcc_unreachable ();
- }
- }
-
- ok = true;
- goto expand_perm_const_2_end;
- }
- else if (loongarch_is_single_op_perm (d))
- {
- /* Permutation that only select elements from op0. */
- if (!d->testing_p)
- {
- /* Prepare temp register instead of modify original op. */
- use_alt_op = true;
- op0_alt = gen_reg_rtx (d->vmode);
- op1_alt = gen_reg_rtx (d->vmode);
-
- emit_move_insn (op0_alt, d->op0);
- emit_move_insn (op1_alt, d->op1);
-
- rtx conv_op0 = simplify_gen_subreg (E_V4DImode, d->op0, d->vmode, 0);
- rtx conv_op0a = simplify_gen_subreg (E_V4DImode, op0_alt,
- d->vmode, 0);
- rtx conv_op1a = simplify_gen_subreg (E_V4DImode, op1_alt,
- d->vmode, 0);
-
- /* Duplicate op0's low 128bit in op0, then duplicate high 128bit
- in op1. After this, xvshuf.* insn's selector argument can
- access all elements we need for correct permutation result. */
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op0a, conv_op0a, conv_op0,
- GEN_INT (0x00)));
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op1a, conv_op1a, conv_op0,
- GEN_INT (0x11)));
-
- /* In this case, there's no need to remap selector's indices. */
- for (i = 0; i < d->nelt; i += 1)
- {
- remapped[i] = d->perm[i];
- }
+ return true;
}
- }
- else if (loongarch_is_divisible_perm (d))
- {
- /* Divisible perm:
- Low 128bit of selector only selects elements of op0,
- and high 128bit of selector only selects elements of op1. */
- if (!d->testing_p)
+expand_perm_const_end:
+ if (flag)
{
- /* Prepare temp register instead of modify original op. */
- use_alt_op = true;
- op0_alt = gen_reg_rtx (d->vmode);
- op1_alt = gen_reg_rtx (d->vmode);
-
- emit_move_insn (op0_alt, d->op0);
- emit_move_insn (op1_alt, d->op1);
-
- rtx conv_op0a = simplify_gen_subreg (E_V4DImode, op0_alt,
- d->vmode, 0);
- rtx conv_op1a = simplify_gen_subreg (E_V4DImode, op1_alt,
- d->vmode, 0);
- rtx conv_op0 = simplify_gen_subreg (E_V4DImode, d->op0, d->vmode, 0);
- rtx conv_op1 = simplify_gen_subreg (E_V4DImode, d->op1, d->vmode, 0);
-
- /* Reorganize op0's hi/lo 128bit and op1's hi/lo 128bit, to make sure
- that selector's low 128bit can access all op0's elements, and
- selector's high 128bit can access all op1's elements. */
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op0a, conv_op0a, conv_op1,
- GEN_INT (0x02)));
- emit_insn (gen_lasx_xvpermi_q_v4di (conv_op1a, conv_op1a, conv_op0,
- GEN_INT (0x31)));
-
- /* No need to modify indices. */
- for (i = 0; i < d->nelt;i += 1)
+ /* Copy selector vector from memory to vector register for later insn
+ gen function.
+ If vector's element in floating point value, we cannot fit
+ selector argument into insn gen function directly, because of the
+ insn template definition. As a solution, generate a integral mode
+ subreg of target, then copy selector vector (that is in integral
+ mode) to this subreg. */
+ switch (d->vmode)
{
- remapped[i] = d->perm[i];
+ case E_V4DFmode:
+ sel = gen_rtx_CONST_VECTOR (E_V4DImode, gen_rtvec_v (d->nelt,
+ rperm));
+ tmp = simplify_gen_subreg (E_V4DImode, d->target, d->vmode, 0);
+ emit_move_insn (tmp, sel);
+ break;
+ case E_V8SFmode:
+ sel = gen_rtx_CONST_VECTOR (E_V8SImode, gen_rtvec_v (d->nelt,
+ rperm));
+ tmp = simplify_gen_subreg (E_V8SImode, d->target, d->vmode, 0);
+ emit_move_insn (tmp, sel);
+ break;
+ default:
+ sel = gen_rtx_CONST_VECTOR (d->vmode, gen_rtvec_v (d->nelt,
+ rperm));
+ emit_move_insn (d->target, sel);
+ break;
}
- }
- }
- else if (loongarch_is_triple_stride_extract (d))
- {
- /* Selector sample: E_V4DFmode, { 1, 4, 7, 0 }. */
- if (!d->testing_p)
- {
- /* Resolve it with brute force modification. */
- remapped[0] = 1;
- remapped[1] = 2;
- remapped[2] = 3;
- remapped[3] = 0;
- }
- }
- else
- {
- /* When all of the detections above are failed, we will try last
- strategy.
- The for loop tries to detect following rules based on indices' value,
- its position inside of selector vector ,and strange behavior of
- xvshuf.* insn; Then we take corresponding action. (Replace with new
- value, or give up whole permutation expansion.) */
- for (i = 0; i < d->nelt; i += 1)
- {
- /* % (2 * d->nelt) */
- idx = d->perm[i];
- /* if index is located in low 128bit of selector vector. */
- if (i < d->nelt / 2)
- {
- /* Fail case 1: index tries to reach element that located in op0's
- high 128bit. */
- if (idx >= d->nelt / 2 && idx < d->nelt)
- {
- goto expand_perm_const_2_end;
- }
- /* Fail case 2: index tries to reach element that located in
- op1's high 128bit. */
- if (idx >= (d->nelt + d->nelt / 2))
- {
- goto expand_perm_const_2_end;
- }
+ target = d->target;
+ op0 = d->op0;
+ op1 = d->one_vector_p ? d->op0 : d->op1;
- /* Success case: index tries to reach elements that located in
- op1's low 128bit. Apply - (nelt / 2) offset to original
- value. */
- if (idx >= d->nelt && idx < (d->nelt + d->nelt / 2))
- {
- idx -= d->nelt / 2;
- }
- }
- /* if index is located in high 128bit of selector vector. */
- else
+ /* We FINALLY can generate xvshuf.* insn. */
+ switch (d->vmode)
{
- /* Fail case 1: index tries to reach element that located in
- op1's low 128bit. */
- if (idx >= d->nelt && idx < (d->nelt + d->nelt / 2))
- {
- goto expand_perm_const_2_end;
- }
- /* Fail case 2: index tries to reach element that located in
- op0's low 128bit. */
- if (idx < (d->nelt / 2))
- {
- goto expand_perm_const_2_end;
- }
- /* Success case: index tries to reach element that located in
- op0's high 128bit. */
- if (idx >= d->nelt / 2 && idx < d->nelt)
- {
- idx -= d->nelt / 2;
- }
+ case E_V4DFmode:
+ emit_insn (gen_lasx_xvshuf_d_f (target, target, op1, op0));
+ break;
+ case E_V4DImode:
+ emit_insn (gen_lasx_xvshuf_d (target, target, op1, op0));
+ break;
+ case E_V8SFmode:
+ emit_insn (gen_lasx_xvshuf_w_f (target, target, op1, op0));
+ break;
+ case E_V8SImode:
+ emit_insn (gen_lasx_xvshuf_w (target, target, op1, op0));
+ break;
+ case E_V16HImode:
+ emit_insn (gen_lasx_xvshuf_h (target, target, op1, op0));
+ break;
+ case E_V32QImode:
+ emit_insn (gen_lasx_xvshuf_b (target, op1, op0, target));
+ break;
+ default:
+ gcc_unreachable ();
+ break;
}
- /* No need to process other case that we did not mentioned. */
-
- /* Assign with original or processed value. */
- remapped[i] = idx;
- }
- }
- ok = true;
- /* If testing_p is true, compiler is trying to figure out that backend can
- handle this permutation, but doesn't want to generate actual insn. So
- if true, exit directly. */
- if (d->testing_p)
- {
- goto expand_perm_const_2_end;
- }
-
- /* Convert remapped selector array to RTL array. */
- for (i = 0; i < d->nelt; i += 1)
- {
- rperm[i] = GEN_INT (remapped[i]);
- }
-
- /* Copy selector vector from memory to vector regiter for later insn gen
- function.
- If vector's element in floating point value, we cannot fit selector
- argument into insn gen function directly, because of the insn template
- definition. As a solution, generate a integral mode subreg of target,
- then copy selector vector (that is in integral mode) to this subreg. */
- switch (d->vmode)
- {
- case E_V4DFmode:
- sel = gen_rtx_CONST_VECTOR (E_V4DImode, gen_rtvec_v (d->nelt, rperm));
- tmp = simplify_gen_subreg (E_V4DImode, d->target, d->vmode, 0);
- emit_move_insn (tmp, sel);
- break;
- case E_V8SFmode:
- sel = gen_rtx_CONST_VECTOR (E_V8SImode, gen_rtvec_v (d->nelt, rperm));
- tmp = simplify_gen_subreg (E_V8SImode, d->target, d->vmode, 0);
- emit_move_insn (tmp, sel);
- break;
- default:
- sel = gen_rtx_CONST_VECTOR (d->vmode, gen_rtvec_v (d->nelt, rperm));
- emit_move_insn (d->target, sel);
- break;
- }
-
- target = d->target;
- /* If temp op registers are requested in previous if branch, then use temp
- register intead of original one. */
- if (use_alt_op)
- {
- op0 = op0_alt != NULL_RTX ? op0_alt : d->op0;
- op1 = op1_alt != NULL_RTX ? op1_alt : d->op1;
- }
- else
- {
- op0 = d->op0;
- op1 = d->one_vector_p ? d->op0 : d->op1;
- }
-
- /* We FINALLY can generate xvshuf.* insn. */
- switch (d->vmode)
- {
- case E_V4DFmode:
- emit_insn (gen_lasx_xvshuf_d_f (target, target, op1, op0));
- break;
- case E_V4DImode:
- emit_insn (gen_lasx_xvshuf_d (target, target, op1, op0));
- break;
- case E_V8SFmode:
- emit_insn (gen_lasx_xvshuf_w_f (target, target, op1, op0));
- break;
- case E_V8SImode:
- emit_insn (gen_lasx_xvshuf_w (target, target, op1, op0));
- break;
- case E_V16HImode:
- emit_insn (gen_lasx_xvshuf_h (target, target, op1, op0));
- break;
- case E_V32QImode:
- emit_insn (gen_lasx_xvshuf_b (target, op1, op0, target));
- break;
- default:
- gcc_unreachable ();
- break;
- }
-
- /* Extra insn for swapping the hi/lo 128bit of target vector register. */
- if (reverse_hi_lo)
- {
- switch (d->vmode)
- {
- case E_V4DFmode:
- emit_insn (gen_lasx_xvpermi_q_v4df (d->target, d->target,
- d->target, GEN_INT (0x1)));
- break;
- case E_V4DImode:
- emit_insn (gen_lasx_xvpermi_q_v4di (d->target, d->target,
- d->target, GEN_INT (0x1)));
- break;
- case E_V8SFmode:
- emit_insn (gen_lasx_xvpermi_q_v8sf (d->target, d->target,
- d->target, GEN_INT (0x1)));
- break;
- case E_V8SImode:
- emit_insn (gen_lasx_xvpermi_q_v8si (d->target, d->target,
- d->target, GEN_INT (0x1)));
- break;
- case E_V16HImode:
- emit_insn (gen_lasx_xvpermi_q_v16hi (d->target, d->target,
- d->target, GEN_INT (0x1)));
- break;
- case E_V32QImode:
- emit_insn (gen_lasx_xvpermi_q_v32qi (d->target, d->target,
- d->target, GEN_INT (0x1)));
- break;
- default:
- break;
+ return true;
}
}
- /* Extra insn required by odd/even extraction. Swapping the second and third
- 64bit in target vector register. */
- else if (extract_ev_od)
- {
- rtx converted = simplify_gen_subreg (E_V4DImode, d->target, d->vmode, 0);
- emit_insn (gen_lasx_xvpermi_d_v4di (converted, converted,
- GEN_INT (0xD8)));
- }
-expand_perm_const_2_end:
- return ok;
+ return false;
}
/* Implement TARGET_VECTORIZE_VEC_PERM_CONST. */
@@ -10345,25 +9463,19 @@ loongarch_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
if (!d.one_vector_p)
d.op1 = gen_raw_REG (d.vmode, LAST_VIRTUAL_REGISTER + 3);
- ok = loongarch_expand_vec_perm_const_2 (&d);
- if (ok)
- return ok;
-
start_sequence ();
- ok = loongarch_expand_vec_perm_const_1 (&d);
+ ok = loongarch_expand_vec_perm_const (&d);
end_sequence ();
return ok;
}
- ok = loongarch_expand_vec_perm_const_2 (&d);
- if (!ok)
- ok = loongarch_expand_vec_perm_const_1 (&d);
+ ok = loongarch_expand_vec_perm_const (&d);
/* If we were given a two-vector permutation which just happened to
have both input vectors equal, we folded this into a one-vector
permutation. There are several loongson patterns that are matched
via direct vec_select+vec_concat expansion, but we do not have
- support in loongarch_expand_vec_perm_const_1 to guess the adjustment
+ support in loongarch_expand_vec_perm_const to guess the adjustment
that should be made for a single operand. Just try again with
the original permutation. */
if (!ok && which == 3)
@@ -10372,7 +9484,7 @@ loongarch_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
d.op1 = op1;
d.one_vector_p = false;
memcpy (d.perm, orig_perm, MAX_VECT_LEN);
- ok = loongarch_expand_vec_perm_const_1 (&d);
+ ok = loongarch_expand_vec_perm_const (&d);
}
return ok;
diff --git a/gcc/config/loongarch/loongarch.opt.urls b/gcc/config/loongarch/loongarch.opt.urls
new file mode 100644
index 0000000..c78bbfe
--- /dev/null
+++ b/gcc/config/loongarch/loongarch.opt.urls
@@ -0,0 +1,66 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/loongarch/loongarch.opt and generated HTML
+
+mfpu=
+UrlSuffix(gcc/LoongArch-Options.html#index-mfpu-2)
+
+msoft-float
+UrlSuffix(gcc/LoongArch-Options.html#index-msoft-float-5)
+
+msingle-float
+UrlSuffix(gcc/LoongArch-Options.html#index-msingle-float)
+
+mdouble-float
+UrlSuffix(gcc/LoongArch-Options.html#index-mdouble-float-1)
+
+msimd=
+UrlSuffix(gcc/LoongArch-Options.html#index-msimd-1)
+
+march=
+UrlSuffix(gcc/LoongArch-Options.html#index-march-7)
+
+mtune=
+UrlSuffix(gcc/LoongArch-Options.html#index-mtune-8)
+
+mabi=
+UrlSuffix(gcc/LoongArch-Options.html#index-mabi-2)
+
+mbranch-cost=
+UrlSuffix(gcc/LoongArch-Options.html#index-mbranch-cost-2)
+
+mcheck-zero-division
+UrlSuffix(gcc/LoongArch-Options.html#index-mcheck-zero-division)
+
+mcond-move-int
+UrlSuffix(gcc/LoongArch-Options.html#index-mcond-move-int)
+
+mcond-move-float
+UrlSuffix(gcc/LoongArch-Options.html#index-mcond-move-float)
+
+mmemcpy
+UrlSuffix(gcc/LoongArch-Options.html#index-mmemcpy)
+
+mstrict-align
+UrlSuffix(gcc/LoongArch-Options.html#index-mstrict-align-1)
+
+mmax-inline-memcpy-size=
+UrlSuffix(gcc/LoongArch-Options.html#index-mmax-inline-memcpy-size)
+
+mexplicit-relocs=
+UrlSuffix(gcc/LoongArch-Options.html#index-mexplicit-relocs-1)
+
+mexplicit-relocs
+UrlSuffix(gcc/LoongArch-Options.html#index-mexplicit-relocs-1)
+
+mrecip
+UrlSuffix(gcc/LoongArch-Options.html#index-mrecip)
+
+mrecip=
+UrlSuffix(gcc/LoongArch-Options.html#index-mrecip)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mdirect-extern-access
+UrlSuffix(gcc/LoongArch-Options.html#index-mdirect-extern-access)
+
+; skipping UrlSuffix for 'mrelax' due to finding no URLs
+
diff --git a/gcc/config/lynx.opt.urls b/gcc/config/lynx.opt.urls
new file mode 100644
index 0000000..63e7b9c
--- /dev/null
+++ b/gcc/config/lynx.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/lynx.opt and generated HTML
+
+mthreads
+UrlSuffix(gcc/x86-Windows-Options.html#index-mthreads-1)
+
diff --git a/gcc/config/m32c/m32c.opt.urls b/gcc/config/m32c/m32c.opt.urls
new file mode 100644
index 0000000..da1bc02
--- /dev/null
+++ b/gcc/config/m32c/m32c.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m32c/m32c.opt and generated HTML
+
+msim
+UrlSuffix(gcc/M32C-Options.html#index-msim-4)
+
+memregs=
+UrlSuffix(gcc/M32C-Options.html#index-memregs_003d)
+
diff --git a/gcc/config/m32r/m32r.opt.urls b/gcc/config/m32r/m32r.opt.urls
new file mode 100644
index 0000000..ca33866
--- /dev/null
+++ b/gcc/config/m32r/m32r.opt.urls
@@ -0,0 +1,27 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m32r/m32r.opt and generated HTML
+
+m32rx
+UrlSuffix(gcc/M32R_002fD-Options.html#index-m32rx)
+
+m32r2
+UrlSuffix(gcc/M32R_002fD-Options.html#index-m32r2)
+
+m32r
+UrlSuffix(gcc/M32R_002fD-Options.html#index-m32r)
+
+malign-loops
+UrlSuffix(gcc/M32R_002fD-Options.html#index-malign-loops)
+
+mdebug
+UrlSuffix(gcc/M32R_002fD-Options.html#index-mdebug)
+
+; skipping UrlSuffix for 'mflush-func=' due to finding no URLs
+
+mno-flush-func
+UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-func)
+
+mno-flush-trap
+UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-trap)
+
+; skipping UrlSuffix for 'msdata=' due to finding no URLs
+
diff --git a/gcc/config/m68k/ieee.opt.urls b/gcc/config/m68k/ieee.opt.urls
new file mode 100644
index 0000000..9c0c0f9
--- /dev/null
+++ b/gcc/config/m68k/ieee.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/ieee.opt and generated HTML
+
+; skipping UrlSuffix for 'mieee-fp' due to finding no URLs
+
diff --git a/gcc/config/m68k/m68k-tables.opt.urls b/gcc/config/m68k/m68k-tables.opt.urls
new file mode 100644
index 0000000..380dc43
--- /dev/null
+++ b/gcc/config/m68k/m68k-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/m68k-tables.opt and generated HTML
+
diff --git a/gcc/config/m68k/m68k.opt.urls b/gcc/config/m68k/m68k.opt.urls
new file mode 100644
index 0000000..079fbf4
--- /dev/null
+++ b/gcc/config/m68k/m68k.opt.urls
@@ -0,0 +1,107 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/m68k.opt and generated HTML
+
+m5200
+UrlSuffix(gcc/M680x0-Options.html#index-m5200)
+
+m5206e
+UrlSuffix(gcc/M680x0-Options.html#index-m5206e)
+
+m528x
+UrlSuffix(gcc/M680x0-Options.html#index-m528x)
+
+m5307
+UrlSuffix(gcc/M680x0-Options.html#index-m5307)
+
+m5407
+UrlSuffix(gcc/M680x0-Options.html#index-m5407)
+
+m68000
+UrlSuffix(gcc/M680x0-Options.html#index-m68000)
+
+m68010
+UrlSuffix(gcc/M680x0-Options.html#index-m68010)
+
+m68020
+UrlSuffix(gcc/M680x0-Options.html#index-m68020)
+
+m68020-40
+UrlSuffix(gcc/M680x0-Options.html#index-m68020-40)
+
+m68020-60
+UrlSuffix(gcc/M680x0-Options.html#index-m68020-60)
+
+m68030
+UrlSuffix(gcc/M680x0-Options.html#index-m68030)
+
+m68040
+UrlSuffix(gcc/M680x0-Options.html#index-m68040)
+
+m68060
+UrlSuffix(gcc/M680x0-Options.html#index-m68060)
+
+m68881
+UrlSuffix(gcc/M680x0-Options.html#index-m68881)
+
+malign-int
+UrlSuffix(gcc/M680x0-Options.html#index-malign-int)
+
+march=
+UrlSuffix(gcc/M680x0-Options.html#index-march-8)
+
+mbitfield
+UrlSuffix(gcc/M680x0-Options.html#index-mbitfield)
+
+mc68000
+UrlSuffix(gcc/M680x0-Options.html#index-mc68000)
+
+mc68020
+UrlSuffix(gcc/M680x0-Options.html#index-mc68020)
+
+mcfv4e
+UrlSuffix(gcc/M680x0-Options.html#index-mcfv4e)
+
+mcpu=
+UrlSuffix(gcc/M680x0-Options.html#index-mcpu-7)
+
+mcpu32
+UrlSuffix(gcc/M680x0-Options.html#index-mcpu32)
+
+mdiv
+UrlSuffix(gcc/M680x0-Options.html#index-mdiv-1)
+
+mhard-float
+UrlSuffix(gcc/M680x0-Options.html#index-mhard-float-2)
+
+; skipping UrlSuffix for 'mid-shared-library' due to finding no URLs
+
+mlong-jump-table-offsets
+UrlSuffix(gcc/M680x0-Options.html#index-mlong-jump-table-offsets)
+
+mnobitfield
+UrlSuffix(gcc/M680x0-Options.html#index-mnobitfield)
+
+mpcrel
+UrlSuffix(gcc/M680x0-Options.html#index-mpcrel)
+
+mrtd
+UrlSuffix(gcc/M680x0-Options.html#index-mrtd)
+
+; skipping UrlSuffix for 'msep-data' due to finding no URLs
+
+; skipping UrlSuffix for 'mshared-library-id=' due to finding no URLs
+
+mshort
+UrlSuffix(gcc/M680x0-Options.html#index-mshort)
+
+msoft-float
+UrlSuffix(gcc/M680x0-Options.html#index-msoft-float-6)
+
+mstrict-align
+UrlSuffix(gcc/M680x0-Options.html#index-mstrict-align-2)
+
+mtune=
+UrlSuffix(gcc/M680x0-Options.html#index-mtune-9)
+
+mxgot
+UrlSuffix(gcc/M680x0-Options.html#index-mxgot)
+
diff --git a/gcc/config/m68k/uclinux.opt.urls b/gcc/config/m68k/uclinux.opt.urls
new file mode 100644
index 0000000..3fd1392
--- /dev/null
+++ b/gcc/config/m68k/uclinux.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/uclinux.opt and generated HTML
+
diff --git a/gcc/config/mcore/mcore.opt.urls b/gcc/config/mcore/mcore.opt.urls
new file mode 100644
index 0000000..a876c8c
--- /dev/null
+++ b/gcc/config/mcore/mcore.opt.urls
@@ -0,0 +1,38 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mcore/mcore.opt and generated HTML
+
+m210
+UrlSuffix(gcc/MCore-Options.html#index-m210)
+
+m340
+UrlSuffix(gcc/MCore-Options.html#index-m340)
+
+m4byte-functions
+UrlSuffix(gcc/MCore-Options.html#index-m4byte-functions)
+
+mbig-endian
+UrlSuffix(gcc/MCore-Options.html#index-mbig-endian-7)
+
+mcallgraph-data
+UrlSuffix(gcc/MCore-Options.html#index-mcallgraph-data)
+
+mdiv
+UrlSuffix(gcc/MCore-Options.html#index-mdiv-2)
+
+mhardlit
+UrlSuffix(gcc/MCore-Options.html#index-mhardlit)
+
+mlittle-endian
+UrlSuffix(gcc/MCore-Options.html#index-mlittle-endian-7)
+
+mno-lsim
+UrlSuffix(gcc/MCore-Options.html#index-mno-lsim-1)
+
+mslow-bytes
+UrlSuffix(gcc/MCore-Options.html#index-mslow-bytes)
+
+mstack-increment=
+UrlSuffix(gcc/MCore-Options.html#index-mstack-increment)
+
+mwide-bitfields
+UrlSuffix(gcc/MCore-Options.html#index-mwide-bitfields)
+
diff --git a/gcc/config/microblaze/microblaze.opt.urls b/gcc/config/microblaze/microblaze.opt.urls
new file mode 100644
index 0000000..33b13b8
--- /dev/null
+++ b/gcc/config/microblaze/microblaze.opt.urls
@@ -0,0 +1,59 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/microblaze/microblaze.opt and generated HTML
+
+msoft-float
+UrlSuffix(gcc/MicroBlaze-Options.html#index-msoft-float-7)
+
+mhard-float
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mhard-float-3)
+
+msmall-divides
+UrlSuffix(gcc/MicroBlaze-Options.html#index-msmall-divides)
+
+mcpu=
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mcpu_003d-3)
+
+mmemcpy
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mmemcpy-1)
+
+mbig-endian
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mbig-endian-8)
+
+mlittle-endian
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mlittle-endian-8)
+
+mxl-soft-mul
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-soft-mul)
+
+mxl-reorder
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-reorder)
+
+mxl-soft-div
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-soft-div)
+
+mxl-barrel-shift
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-barrel-shift)
+
+mxl-pattern-compare
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-pattern-compare)
+
+mxl-stack-check
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-stack-check)
+
+mxl-gp-opt
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-gp-opt)
+
+mno-clearbss
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mno-clearbss)
+
+mxl-multiply-high
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-multiply-high)
+
+mxl-float-convert
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-float-convert)
+
+mxl-float-sqrt
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-float-sqrt)
+
+mpic-data-is-text-relative
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mpic-data-is-text-relative-1)
+
diff --git a/gcc/config/mips/mips-tables.opt.urls b/gcc/config/mips/mips-tables.opt.urls
new file mode 100644
index 0000000..3b2a77f
--- /dev/null
+++ b/gcc/config/mips/mips-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/mips-tables.opt and generated HTML
+
diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc
index 3131749..46b7d9b 100644
--- a/gcc/config/mips/mips.cc
+++ b/gcc/config/mips/mips.cc
@@ -4170,6 +4170,37 @@ mips_set_reg_reg_cost (machine_mode mode)
}
}
+/* Implement TARGET_INSN_COSTS. */
+
+static int
+mips_insn_cost (rtx_insn *x, bool speed)
+{
+ int cost;
+ int count;
+ int ratio;
+
+ if (recog_memoized (x) < 0
+ && GET_CODE (PATTERN (x)) != ASM_INPUT
+ && asm_noperands (PATTERN (x)) < 0)
+ goto pattern_cost;
+
+ /* FIXME: return get_attr_length? More tests may be needed. */
+ if (!speed)
+ goto pattern_cost;
+
+ count = get_attr_insn_count (x);
+ ratio = get_attr_perf_ratio (x);
+ cost = count * ratio;
+ if (cost > 0)
+ return cost;
+
+pattern_cost:
+ cost = pattern_cost (PATTERN (x), speed);
+ /* If the cost is zero, then it's likely a complex insn.
+ FIXME: Return COSTS_N_INSNS (2)? More tests are needed. */
+ return cost;
+}
+
/* Implement TARGET_RTX_COSTS. */
static bool
@@ -23069,6 +23100,8 @@ mips_bit_clear_p (enum machine_mode mode, unsigned HOST_WIDE_INT m)
#define TARGET_RTX_COSTS mips_rtx_costs
#undef TARGET_ADDRESS_COST
#define TARGET_ADDRESS_COST mips_address_cost
+#undef TARGET_INSN_COST
+#define TARGET_INSN_COST mips_insn_cost
#undef TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P
#define TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P mips_no_speculation_in_delay_slots_p
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 6d47241..17dfcbd 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -312,6 +312,10 @@
;; "11" specifies MEMMODEL_ACQUIRE.
(define_attr "sync_memmodel" "" (const_int 10))
+;; Performance ratio. Add this attr to the slow INSNs.
+;; Used by mips_insn_cost.
+(define_attr "perf_ratio" "" (const_int 0))
+
;; Accumulator operand for madd patterns.
(define_attr "accum_in" "none,0,1,2,3,4,5" (const_string "none"))
@@ -4415,6 +4419,30 @@
[(set_attr "type" "arith")
(set_attr "mode" "SI")])
+(define_insn "*insqisi_extended"
+ [(set (match_operand:DI 0 "register_operand" "=d")
+ (sign_extend:DI
+ (ior:SI (and:SI (subreg:SI (match_dup 0) 0)
+ (const_int 16777215))
+ (ashift:SI
+ (subreg:SI (match_operand:QI 1 "register_operand" "d") 0)
+ (const_int 24)))))]
+ "TARGET_64BIT && !TARGET_MIPS16 && ISA_HAS_EXT_INS"
+ "ins\t%0,%1,24,8"
+ [(set_attr "mode" "SI")
+ (set_attr "perf_ratio" "1")])
+
+(define_insn "*inshisi_extended"
+ [(set (match_operand:DI 0 "register_operand" "=d")
+ (sign_extend:DI
+ (ior:SI
+ (ashift:SI (subreg:SI (match_operand:HI 1 "register_operand" "d") 0)
+ (const_int 16))
+ (zero_extend:SI (subreg:HI (match_dup 0) 0)))))]
+ "TARGET_64BIT && !TARGET_MIPS16 && ISA_HAS_EXT_INS"
+ "ins\t%0,%1,16,16"
+ [(set_attr "mode" "SI")
+ (set_attr "perf_ratio" "1")])
(define_expand "insvmisalign<mode>"
[(set (zero_extract:GPR (match_operand:BLK 0 "memory_operand")
diff --git a/gcc/config/mips/mips.opt.urls b/gcc/config/mips/mips.opt.urls
new file mode 100644
index 0000000..ff2f0ae
--- /dev/null
+++ b/gcc/config/mips/mips.opt.urls
@@ -0,0 +1,269 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/mips.opt and generated HTML
+
+EB
+UrlSuffix(gcc/MIPS-Options.html#index-EB-2)
+
+EL
+UrlSuffix(gcc/MIPS-Options.html#index-EL-2)
+
+; skipping UrlSuffix for 'mabi=' due to finding no URLs
+
+mabicalls
+UrlSuffix(gcc/MIPS-Options.html#index-mabicalls)
+
+mmad
+UrlSuffix(gcc/MIPS-Options.html#index-mmad)
+
+mimadd
+UrlSuffix(gcc/MIPS-Options.html#index-mimadd)
+
+march=
+UrlSuffix(gcc/MIPS-Options.html#index-march-9)
+
+mbranch-cost=
+UrlSuffix(gcc/MIPS-Options.html#index-mbranch-cost-3)
+
+mbranch-likely
+UrlSuffix(gcc/MIPS-Options.html#index-mbranch-likely)
+
+mflip-mips16
+UrlSuffix(gcc/MIPS-Options.html#index-mflip-mips16)
+
+mcheck-zero-division
+UrlSuffix(gcc/MIPS-Options.html#index-mcheck-zero-division-1)
+
+mcode-readable=
+UrlSuffix(gcc/MIPS-Options.html#index-mcode-readable)
+
+mdivide-breaks
+UrlSuffix(gcc/MIPS-Options.html#index-mdivide-breaks)
+
+mdivide-traps
+UrlSuffix(gcc/MIPS-Options.html#index-mdivide-traps)
+
+mdmx
+UrlSuffix(gcc/MIPS-Options.html#index-mdmx)
+
+mdouble-float
+UrlSuffix(gcc/MIPS-Options.html#index-mdouble-float-2)
+
+mdsp
+UrlSuffix(gcc/MIPS-Options.html#index-mdsp-1)
+
+mdspr2
+UrlSuffix(gcc/MIPS-Options.html#index-mdspr2)
+
+; skipping UrlSuffix for 'mdebug' due to finding no URLs
+
+; skipping UrlSuffix for 'meb' due to finding no URLs
+
+; skipping UrlSuffix for 'mel' due to finding no URLs
+
+membedded-data
+UrlSuffix(gcc/MIPS-Options.html#index-membedded-data)
+
+meva
+UrlSuffix(gcc/MIPS-Options.html#index-meva)
+
+mexplicit-relocs
+UrlSuffix(gcc/MIPS-Options.html#index-mexplicit-relocs-2)
+
+mextern-sdata
+UrlSuffix(gcc/MIPS-Options.html#index-mextern-sdata)
+
+mfix-24k
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-24k)
+
+mfix-r4000
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r4000)
+
+mfix-r4400
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r4400)
+
+mfix-r5900
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r5900)
+
+mfix-rm7000
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-rm7000)
+
+mfix-r10000
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r10000)
+
+mfix-sb1
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-sb1)
+
+mfix-vr4120
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-vr4120)
+
+mfix-vr4130
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-vr4130)
+
+mfp-exceptions
+UrlSuffix(gcc/MIPS-Options.html#index-mfp-exceptions)
+
+mfp32
+UrlSuffix(gcc/MIPS-Options.html#index-mfp32)
+
+mfpxx
+UrlSuffix(gcc/MIPS-Options.html#index-mfpxx)
+
+mfp64
+UrlSuffix(gcc/MIPS-Options.html#index-mfp64)
+
+mflush-func=
+UrlSuffix(gcc/MIPS-Options.html#index-mflush-func)
+
+mgp32
+UrlSuffix(gcc/MIPS-Options.html#index-mgp32)
+
+mgp64
+UrlSuffix(gcc/MIPS-Options.html#index-mgp64)
+
+mgpopt
+UrlSuffix(gcc/MIPS-Options.html#index-mgpopt)
+
+mplt
+UrlSuffix(gcc/MIPS-Options.html#index-mplt)
+
+mhard-float
+UrlSuffix(gcc/MIPS-Options.html#index-mhard-float-4)
+
+minterlink-compressed
+UrlSuffix(gcc/MIPS-Options.html#index-minterlink-compressed)
+
+minterlink-mips16
+UrlSuffix(gcc/MIPS-Options.html#index-minterlink-mips16)
+
+mips16
+UrlSuffix(gcc/MIPS-Options.html#index-mips16)
+
+mips3d
+UrlSuffix(gcc/MIPS-Options.html#index-mips3d)
+
+mllsc
+UrlSuffix(gcc/MIPS-Options.html#index-mllsc)
+
+mlocal-sdata
+UrlSuffix(gcc/MIPS-Options.html#index-mlocal-sdata)
+
+mlong-calls
+UrlSuffix(gcc/MIPS-Options.html#index-mlong-calls-6)
+
+mlong32
+UrlSuffix(gcc/MIPS-Options.html#index-mlong32)
+
+mlong64
+UrlSuffix(gcc/MIPS-Options.html#index-mlong64)
+
+mmcount-ra-address
+UrlSuffix(gcc/MIPS-Options.html#index-mmcount-ra-address)
+
+mmemcpy
+UrlSuffix(gcc/MIPS-Options.html#index-mmemcpy-2)
+
+mmicromips
+UrlSuffix(gcc/MIPS-Options.html#index-mmicromips)
+
+mmt
+UrlSuffix(gcc/MIPS-Options.html#index-mmt)
+
+mno-float
+UrlSuffix(gcc/MIPS-Options.html#index-mno-float)
+
+mmcu
+UrlSuffix(gcc/MIPS-Options.html#index-mmcu-1)
+
+; skipping UrlSuffix for 'mno-flush-func' due to finding no URLs
+
+mno-mdmx
+UrlSuffix(gcc/MIPS-Options.html#index-mno-mdmx)
+
+mno-mips16
+UrlSuffix(gcc/MIPS-Options.html#index-mno-mips16)
+
+mno-mips3d
+UrlSuffix(gcc/MIPS-Options.html#index-mno-mips3d)
+
+mpaired-single
+UrlSuffix(gcc/MIPS-Options.html#index-mpaired-single)
+
+mr10k-cache-barrier=
+UrlSuffix(gcc/MIPS-Options.html#index-mr10k-cache-barrier)
+
+mrelax-pic-calls
+UrlSuffix(gcc/MIPS-Options.html#index-mrelax-pic-calls)
+
+msingle-float
+UrlSuffix(gcc/MIPS-Options.html#index-msingle-float-1)
+
+msmartmips
+UrlSuffix(gcc/MIPS-Options.html#index-msmartmips)
+
+msoft-float
+UrlSuffix(gcc/MIPS-Options.html#index-msoft-float-8)
+
+msplit-addresses
+UrlSuffix(gcc/MIPS-Options.html#index-msplit-addresses)
+
+mmips16e2
+UrlSuffix(gcc/MIPS-Options.html#index-mmips16e2)
+
+msym32
+UrlSuffix(gcc/MIPS-Options.html#index-msym32)
+
+msynci
+UrlSuffix(gcc/MIPS-Options.html#index-msynci)
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+mlxc1-sxc1
+UrlSuffix(gcc/MIPS-Options.html#index-mlxc1-sxc1)
+
+mmadd4
+UrlSuffix(gcc/MIPS-Options.html#index-mmadd4)
+
+mtune=
+UrlSuffix(gcc/MIPS-Options.html#index-mtune-10)
+
+munaligned-access
+UrlSuffix(gcc/MIPS-Options.html#index-munaligned-access-1)
+
+muninit-const-in-rodata
+UrlSuffix(gcc/MIPS-Options.html#index-muninit-const-in-rodata)
+
+mvirt
+UrlSuffix(gcc/MIPS-Options.html#index-mvirt)
+
+mxpa
+UrlSuffix(gcc/MIPS-Options.html#index-mxpa)
+
+mcrc
+UrlSuffix(gcc/MIPS-Options.html#index-mcrc)
+
+mginv
+UrlSuffix(gcc/MIPS-Options.html#index-mginv)
+
+mvr4130-align
+UrlSuffix(gcc/MIPS-Options.html#index-mvr4130-align)
+
+mxgot
+UrlSuffix(gcc/MIPS-Options.html#index-mxgot-1)
+
+modd-spreg
+UrlSuffix(gcc/MIPS-Options.html#index-modd-spreg)
+
+mframe-header-opt
+UrlSuffix(gcc/MIPS-Options.html#index-mframe-header-opt)
+
+mload-store-pairs
+UrlSuffix(gcc/MIPS-Options.html#index-mload-store-pairs)
+
+mloongson-mmi
+UrlSuffix(gcc/MIPS-Options.html#index-mloongson-mmi)
+
+mloongson-ext
+UrlSuffix(gcc/MIPS-Options.html#index-mloongson-ext)
+
+mloongson-ext2
+UrlSuffix(gcc/MIPS-Options.html#index-mloongson-ext2)
+
diff --git a/gcc/config/mips/sde.opt.urls b/gcc/config/mips/sde.opt.urls
new file mode 100644
index 0000000..2a3d290
--- /dev/null
+++ b/gcc/config/mips/sde.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/sde.opt and generated HTML
+
diff --git a/gcc/config/mmix/mmix.opt.urls b/gcc/config/mmix/mmix.opt.urls
new file mode 100644
index 0000000..6722f9e
--- /dev/null
+++ b/gcc/config/mmix/mmix.opt.urls
@@ -0,0 +1,44 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mmix/mmix.opt and generated HTML
+
+mlibfuncs
+UrlSuffix(gcc/MMIX-Options.html#index-mlibfuncs)
+
+mabi=mmixware
+UrlSuffix(gcc/MMIX-Options.html#index-mabi_003dmmixware)
+
+mabi=gnu
+UrlSuffix(gcc/MMIX-Options.html#index-mabi_003dgnu)
+
+mepsilon
+UrlSuffix(gcc/MMIX-Options.html#index-mepsilon)
+
+mzero-extend
+UrlSuffix(gcc/MMIX-Options.html#index-mzero-extend)
+
+mknuthdiv
+UrlSuffix(gcc/MMIX-Options.html#index-mknuthdiv)
+
+mtoplevel-symbols
+UrlSuffix(gcc/MMIX-Options.html#index-mtoplevel-symbols)
+
+melf
+UrlSuffix(gcc/MMIX-Options.html#index-melf-1)
+
+mbranch-predict
+UrlSuffix(gcc/MMIX-Options.html#index-mbranch-predict)
+
+mno-branch-predict
+UrlSuffix(gcc/MMIX-Options.html#index-mno-branch-predict)
+
+mbase-addresses
+UrlSuffix(gcc/MMIX-Options.html#index-mbase-addresses)
+
+mno-base-addresses
+UrlSuffix(gcc/MMIX-Options.html#index-mno-base-addresses)
+
+msingle-exit
+UrlSuffix(gcc/MMIX-Options.html#index-msingle-exit)
+
+mno-single-exit
+UrlSuffix(gcc/MMIX-Options.html#index-mno-single-exit)
+
diff --git a/gcc/config/mn10300/mn10300.opt.urls b/gcc/config/mn10300/mn10300.opt.urls
new file mode 100644
index 0000000..396ca4a
--- /dev/null
+++ b/gcc/config/mn10300/mn10300.opt.urls
@@ -0,0 +1,32 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mn10300/mn10300.opt and generated HTML
+
+mam33
+UrlSuffix(gcc/MN10300-Options.html#index-mam33)
+
+mam33-2
+UrlSuffix(gcc/MN10300-Options.html#index-mam33-2)
+
+mam34
+UrlSuffix(gcc/MN10300-Options.html#index-mam34)
+
+mtune=
+UrlSuffix(gcc/MN10300-Options.html#index-mtune-11)
+
+mmult-bug
+UrlSuffix(gcc/MN10300-Options.html#index-mmult-bug)
+
+mno-crt0
+UrlSuffix(gcc/MN10300-Options.html#index-mno-crt0)
+
+mrelax
+UrlSuffix(gcc/MN10300-Options.html#index-mrelax-2)
+
+mreturn-pointer-on-d0
+UrlSuffix(gcc/MN10300-Options.html#index-mreturn-pointer-on-d0)
+
+mliw
+UrlSuffix(gcc/MN10300-Options.html#index-mliw)
+
+msetlb
+UrlSuffix(gcc/MN10300-Options.html#index-msetlb)
+
diff --git a/gcc/config/moxie/moxie.opt.urls b/gcc/config/moxie/moxie.opt.urls
new file mode 100644
index 0000000..a1b8b8a
--- /dev/null
+++ b/gcc/config/moxie/moxie.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/moxie/moxie.opt and generated HTML
+
+meb
+UrlSuffix(gcc/Moxie-Options.html#index-meb)
+
+mel
+UrlSuffix(gcc/Moxie-Options.html#index-mel)
+
+mmul.x
+UrlSuffix(gcc/Moxie-Options.html#index-mmul_002ex)
+
+mno-crt0
+UrlSuffix(gcc/Moxie-Options.html#index-mno-crt0-1)
+
diff --git a/gcc/config/msp430/msp430.opt.urls b/gcc/config/msp430/msp430.opt.urls
new file mode 100644
index 0000000..420c1c5
--- /dev/null
+++ b/gcc/config/msp430/msp430.opt.urls
@@ -0,0 +1,53 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/msp430/msp430.opt and generated HTML
+
+msim
+UrlSuffix(gcc/MSP430-Options.html#index-msim-5)
+
+mtiny-printf
+UrlSuffix(gcc/MSP430-Options.html#index-mtiny-printf)
+
+masm-hex
+UrlSuffix(gcc/MSP430-Options.html#index-masm-hex)
+
+mmcu=
+UrlSuffix(gcc/MSP430-Options.html#index-mmcu_003d)
+
+mwarn-mcu
+UrlSuffix(gcc/MSP430-Options.html#index-mwarn-mcu)
+
+mwarn-devices-csv
+UrlSuffix(gcc/MSP430-Options.html#index-mwarn-devices-csv)
+
+mcpu=
+UrlSuffix(gcc/MSP430-Options.html#index-mcpu_003d-4)
+
+mlarge
+UrlSuffix(gcc/MSP430-Options.html#index-mlarge)
+
+msmall
+UrlSuffix(gcc/MSP430-Options.html#index-msmall)
+
+mrelax
+UrlSuffix(gcc/MSP430-Options.html#index-mrelax-3)
+
+minrt
+UrlSuffix(gcc/MSP430-Options.html#index-minrt)
+
+mhwmult=
+UrlSuffix(gcc/MSP430-Options.html#index-mhwmult_003d)
+
+mcode-region=
+UrlSuffix(gcc/MSP430-Options.html#index-mcode-region)
+
+mdata-region=
+UrlSuffix(gcc/MSP430-Options.html#index-mdata-region)
+
+msilicon-errata=
+UrlSuffix(gcc/MSP430-Options.html#index-msilicon-errata)
+
+msilicon-errata-warn=
+UrlSuffix(gcc/MSP430-Options.html#index-msilicon-errata-warn)
+
+mmax-inline-shift=
+UrlSuffix(gcc/MSP430-Options.html#index-mmax-inline-shift_003d)
+
diff --git a/gcc/config/nds32/nds32-elf.opt.urls b/gcc/config/nds32/nds32-elf.opt.urls
new file mode 100644
index 0000000..5399afb
--- /dev/null
+++ b/gcc/config/nds32/nds32-elf.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nds32/nds32-elf.opt and generated HTML
+
+mcmodel=
+UrlSuffix(gcc/NDS32-Options.html#index-mcmodel)
+
diff --git a/gcc/config/nds32/nds32-linux.opt.urls b/gcc/config/nds32/nds32-linux.opt.urls
new file mode 100644
index 0000000..27d39f0
--- /dev/null
+++ b/gcc/config/nds32/nds32-linux.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nds32/nds32-linux.opt and generated HTML
+
+mcmodel=
+UrlSuffix(gcc/NDS32-Options.html#index-mcmodel)
+
diff --git a/gcc/config/nds32/nds32.opt.urls b/gcc/config/nds32/nds32.opt.urls
new file mode 100644
index 0000000..e34512d
--- /dev/null
+++ b/gcc/config/nds32/nds32.opt.urls
@@ -0,0 +1,57 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nds32/nds32.opt and generated HTML
+
+; skipping UrlSuffix for 'EB' due to finding no URLs
+
+; skipping UrlSuffix for 'EL' due to finding no URLs
+
+; skipping UrlSuffix for 'mabi=' due to finding no URLs
+
+mreduced-regs
+UrlSuffix(gcc/NDS32-Options.html#index-mreduced-regs)
+
+mfull-regs
+UrlSuffix(gcc/NDS32-Options.html#index-mfull-regs)
+
+mbig-endian
+UrlSuffix(gcc/NDS32-Options.html#index-mbig-endian-9)
+
+mlittle-endian
+UrlSuffix(gcc/NDS32-Options.html#index-mlittle-endian-9)
+
+mcmov
+UrlSuffix(gcc/NDS32-Options.html#index-mcmov)
+
+mext-perf
+UrlSuffix(gcc/NDS32-Options.html#index-mext-perf)
+
+mext-perf2
+UrlSuffix(gcc/NDS32-Options.html#index-mext-perf2)
+
+mext-string
+UrlSuffix(gcc/NDS32-Options.html#index-mext-string)
+
+mv3push
+UrlSuffix(gcc/NDS32-Options.html#index-mv3push)
+
+m16-bit
+UrlSuffix(gcc/NDS32-Options.html#index-m16-bit-1)
+
+misr-vector-size=
+UrlSuffix(gcc/NDS32-Options.html#index-misr-vector-size)
+
+mcache-block-size=
+UrlSuffix(gcc/NDS32-Options.html#index-mcache-block-size)
+
+march=
+UrlSuffix(gcc/NDS32-Options.html#index-march-10)
+
+; skipping UrlSuffix for 'mcpu=' due to finding no URLs
+
+mctor-dtor
+UrlSuffix(gcc/NDS32-Options.html#index-mctor-dtor)
+
+mrelax
+UrlSuffix(gcc/NDS32-Options.html#index-mrelax-4)
+
+; skipping UrlSuffix for 'munaligned-access' due to finding no URLs
+
diff --git a/gcc/config/netbsd-elf.opt.urls b/gcc/config/netbsd-elf.opt.urls
new file mode 100644
index 0000000..c0e791c
--- /dev/null
+++ b/gcc/config/netbsd-elf.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/netbsd-elf.opt and generated HTML
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/netbsd.opt.urls b/gcc/config/netbsd.opt.urls
new file mode 100644
index 0000000..513bf9b
--- /dev/null
+++ b/gcc/config/netbsd.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/netbsd.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/nios2/elf.opt.urls b/gcc/config/nios2/elf.opt.urls
new file mode 100644
index 0000000..1367c6b
--- /dev/null
+++ b/gcc/config/nios2/elf.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nios2/elf.opt and generated HTML
+
+msmallc
+UrlSuffix(gcc/Nios-II-Options.html#index-msmallc)
+
+msys-lib=
+UrlSuffix(gcc/Nios-II-Options.html#index-msys-lib)
+
+msys-crt0=
+UrlSuffix(gcc/Nios-II-Options.html#index-msys-crt0)
+
+mhal
+UrlSuffix(gcc/Nios-II-Options.html#index-mhal)
+
diff --git a/gcc/config/nios2/nios2.opt.urls b/gcc/config/nios2/nios2.opt.urls
new file mode 100644
index 0000000..a38ea28
--- /dev/null
+++ b/gcc/config/nios2/nios2.opt.urls
@@ -0,0 +1,50 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nios2/nios2.opt and generated HTML
+
+mhw-div
+UrlSuffix(gcc/Nios-II-Options.html#index-mhw-div)
+
+mhw-mul
+UrlSuffix(gcc/Nios-II-Options.html#index-mhw-mul)
+
+mhw-mulx
+UrlSuffix(gcc/Nios-II-Options.html#index-mhw-mulx)
+
+mfast-sw-div
+UrlSuffix(gcc/Nios-II-Options.html#index-mfast-sw-div)
+
+mbypass-cache
+UrlSuffix(gcc/Nios-II-Options.html#index-mbypass-cache)
+
+mno-cache-volatile
+UrlSuffix(gcc/Nios-II-Options.html#index-mno-cache-volatile)
+
+mcache-volatile
+UrlSuffix(gcc/Nios-II-Options.html#index-mcache-volatile)
+
+mgpopt=
+UrlSuffix(gcc/Nios-II-Options.html#index-mgpopt-1)
+
+mgpopt
+UrlSuffix(gcc/Nios-II-Options.html#index-mgpopt-1)
+
+mno-gpopt
+UrlSuffix(gcc/Nios-II-Options.html#index-mno-gpopt-1)
+
+meb
+UrlSuffix(gcc/Nios-II-Options.html#index-meb-1)
+
+mel
+UrlSuffix(gcc/Nios-II-Options.html#index-mel-1)
+
+mcustom-fpu-cfg=
+UrlSuffix(gcc/Nios-II-Options.html#index-mcustom-fpu-cfg)
+
+march=
+UrlSuffix(gcc/Nios-II-Options.html#index-march-11)
+
+mgprel-sec=
+UrlSuffix(gcc/Nios-II-Options.html#index-mgprel-sec)
+
+mr0rel-sec=
+UrlSuffix(gcc/Nios-II-Options.html#index-mr0rel-sec)
+
diff --git a/gcc/config/nvptx/nvptx-gen.opt.urls b/gcc/config/nvptx/nvptx-gen.opt.urls
new file mode 100644
index 0000000..7ea1324
--- /dev/null
+++ b/gcc/config/nvptx/nvptx-gen.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nvptx/nvptx-gen.opt and generated HTML
+
diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc
index 724e403..9363d3e 100644
--- a/gcc/config/nvptx/nvptx.cc
+++ b/gcc/config/nvptx/nvptx.cc
@@ -5921,8 +5921,10 @@ nvptx_record_offload_symbol (tree decl)
fprintf (asm_out_file, "//:");
if (lookup_attribute ("omp declare target indirect",
DECL_ATTRIBUTES (decl)))
- fprintf (asm_out_file, "IND_");
- fprintf (asm_out_file, "FUNC_MAP \"%s\"",
+ fprintf (asm_out_file, "IND_FUNC_MAP");
+ else
+ fprintf (asm_out_file, "FUNC_MAP");
+ fprintf (asm_out_file, " \"%s\"",
IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
for (; dims; dims = TREE_CHAIN (dims))
diff --git a/gcc/config/nvptx/nvptx.opt.urls b/gcc/config/nvptx/nvptx.opt.urls
new file mode 100644
index 0000000..5c8942c
--- /dev/null
+++ b/gcc/config/nvptx/nvptx.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nvptx/nvptx.opt and generated HTML
+
+m64
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-m64)
+
+mmainkernel
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-mmainkernel)
+
+moptimize
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-moptimize)
+
+msoft-stack
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-msoft-stack)
+
+muniform-simt
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-muniform-simt)
+
+mgomp
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-mgomp)
+
+misa=
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-misa)
+
+march=
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-march-12)
+
+mptx=
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-mptx)
+
diff --git a/gcc/config/openbsd.opt.urls b/gcc/config/openbsd.opt.urls
new file mode 100644
index 0000000..d7ea1ae
--- /dev/null
+++ b/gcc/config/openbsd.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/openbsd.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/or1k/elf.opt.urls b/gcc/config/or1k/elf.opt.urls
new file mode 100644
index 0000000..ea3d5d7
--- /dev/null
+++ b/gcc/config/or1k/elf.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/or1k/elf.opt and generated HTML
+
+mboard=
+UrlSuffix(gcc/OpenRISC-Options.html#index-mboard)
+
+mnewlib
+UrlSuffix(gcc/OpenRISC-Options.html#index-mnewlib)
+
diff --git a/gcc/config/or1k/or1k.opt.urls b/gcc/config/or1k/or1k.opt.urls
new file mode 100644
index 0000000..2016ea6
--- /dev/null
+++ b/gcc/config/or1k/or1k.opt.urls
@@ -0,0 +1,46 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/or1k/or1k.opt and generated HTML
+
+mhard-div
+UrlSuffix(gcc/OpenRISC-Options.html#index-mhard-div)
+
+msoft-div
+UrlSuffix(gcc/OpenRISC-Options.html#index-msoft-div)
+
+mhard-mul
+UrlSuffix(gcc/OpenRISC-Options.html#index-mhard-mul)
+
+msoft-mul
+UrlSuffix(gcc/OpenRISC-Options.html#index-msoft-mul)
+
+msoft-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-msoft-float-9)
+
+mhard-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-mhard-float-5)
+
+mdouble-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-mdouble-float-3)
+
+munordered-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-munordered-float)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mcmov
+UrlSuffix(gcc/OpenRISC-Options.html#index-mcmov-1)
+
+mror
+UrlSuffix(gcc/OpenRISC-Options.html#index-mror)
+
+mrori
+UrlSuffix(gcc/OpenRISC-Options.html#index-mrori)
+
+msext
+UrlSuffix(gcc/OpenRISC-Options.html#index-msext)
+
+msfimm
+UrlSuffix(gcc/OpenRISC-Options.html#index-msfimm)
+
+mshftimm
+UrlSuffix(gcc/OpenRISC-Options.html#index-mshftimm)
+
diff --git a/gcc/config/pa/pa-hpux.opt.urls b/gcc/config/pa/pa-hpux.opt.urls
new file mode 100644
index 0000000..6a52dd0
--- /dev/null
+++ b/gcc/config/pa/pa-hpux.opt.urls
@@ -0,0 +1,11 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux.opt and generated HTML
+
+msio
+UrlSuffix(gcc/HPPA-Options.html#index-msio)
+
+nolibdld
+UrlSuffix(gcc/HPPA-Options.html#index-nolibdld)
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/pa/pa-hpux1010.opt.urls b/gcc/config/pa/pa-hpux1010.opt.urls
new file mode 100644
index 0000000..9b96caf
--- /dev/null
+++ b/gcc/config/pa/pa-hpux1010.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux1010.opt and generated HTML
+
diff --git a/gcc/config/pa/pa-hpux1111.opt.urls b/gcc/config/pa/pa-hpux1111.opt.urls
new file mode 100644
index 0000000..706e63c
--- /dev/null
+++ b/gcc/config/pa/pa-hpux1111.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux1111.opt and generated HTML
+
diff --git a/gcc/config/pa/pa-hpux1131.opt.urls b/gcc/config/pa/pa-hpux1131.opt.urls
new file mode 100644
index 0000000..497c49d
--- /dev/null
+++ b/gcc/config/pa/pa-hpux1131.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux1131.opt and generated HTML
+
diff --git a/gcc/config/pa/pa.opt.urls b/gcc/config/pa/pa.opt.urls
new file mode 100644
index 0000000..5b8bceb
--- /dev/null
+++ b/gcc/config/pa/pa.opt.urls
@@ -0,0 +1,71 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa.opt and generated HTML
+
+matomic-libcalls
+UrlSuffix(gcc/HPPA-Options.html#index-matomic-libcalls)
+
+mbig-switch
+UrlSuffix(gcc/HPPA-Options.html#index-mbig-switch)
+
+mcaller-copies
+UrlSuffix(gcc/HPPA-Options.html#index-mcaller-copies)
+
+mcoherent-ldcw
+UrlSuffix(gcc/HPPA-Options.html#index-mcoherent-ldcw)
+
+mdisable-fpregs
+UrlSuffix(gcc/HPPA-Options.html#index-mdisable-fpregs)
+
+mdisable-indexing
+UrlSuffix(gcc/HPPA-Options.html#index-mdisable-indexing)
+
+mfast-indirect-calls
+UrlSuffix(gcc/HPPA-Options.html#index-mfast-indirect-calls)
+
+mfixed-range=
+UrlSuffix(gcc/HPPA-Options.html#index-mfixed-range)
+
+mgas
+UrlSuffix(gcc/HPPA-Options.html#index-mgas)
+
+mjump-in-delay
+UrlSuffix(gcc/HPPA-Options.html#index-mjump-in-delay)
+
+mlinker-opt
+UrlSuffix(gcc/HPPA-Options.html#index-mlinker-opt)
+
+mlong-calls
+UrlSuffix(gcc/HPPA-Options.html#index-mlong-calls-5)
+
+mlong-load-store
+UrlSuffix(gcc/HPPA-Options.html#index-mlong-load-store)
+
+mno-space-regs
+UrlSuffix(gcc/HPPA-Options.html#index-mno-space-regs)
+
+mordered
+UrlSuffix(gcc/HPPA-Options.html#index-mordered)
+
+mpa-risc-1-0
+UrlSuffix(gcc/HPPA-Options.html#index-mpa-risc-1-0)
+
+mpa-risc-1-1
+UrlSuffix(gcc/HPPA-Options.html#index-mpa-risc-1-1)
+
+mpa-risc-2-0
+UrlSuffix(gcc/HPPA-Options.html#index-mpa-risc-2-0)
+
+mportable-runtime
+UrlSuffix(gcc/HPPA-Options.html#index-mportable-runtime)
+
+mschedule=
+UrlSuffix(gcc/HPPA-Options.html#index-mschedule)
+
+msoft-float
+UrlSuffix(gcc/HPPA-Options.html#index-msoft-float-4)
+
+msoft-mult
+UrlSuffix(gcc/HPPA-Options.html#index-msoft-mult)
+
+mspace-regs
+UrlSuffix(gcc/HPPA-Options.html#index-mspace-regs)
+
diff --git a/gcc/config/pa/pa64-hpux.opt.urls b/gcc/config/pa/pa64-hpux.opt.urls
new file mode 100644
index 0000000..9ebf027
--- /dev/null
+++ b/gcc/config/pa/pa64-hpux.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa64-hpux.opt and generated HTML
+
+mgnu-ld
+UrlSuffix(gcc/HPPA-Options.html#index-mgnu-ld)
+
+mhp-ld
+UrlSuffix(gcc/HPPA-Options.html#index-mhp-ld)
+
diff --git a/gcc/config/pdp11/pdp11.opt.urls b/gcc/config/pdp11/pdp11.opt.urls
new file mode 100644
index 0000000..f0544ca
--- /dev/null
+++ b/gcc/config/pdp11/pdp11.opt.urls
@@ -0,0 +1,41 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pdp11/pdp11.opt and generated HTML
+
+m10
+UrlSuffix(gcc/PDP-11-Options.html#index-m10)
+
+m40
+UrlSuffix(gcc/PDP-11-Options.html#index-m40)
+
+m45
+UrlSuffix(gcc/PDP-11-Options.html#index-m45)
+
+mac0
+UrlSuffix(gcc/PDP-11-Options.html#index-mac0)
+
+mdec-asm
+UrlSuffix(gcc/PDP-11-Options.html#index-mdec-asm)
+
+mgnu-asm
+UrlSuffix(gcc/PDP-11-Options.html#index-mgnu-asm)
+
+mfpu
+UrlSuffix(gcc/PDP-11-Options.html#index-mfpu-3)
+
+mint16
+UrlSuffix(gcc/PDP-11-Options.html#index-mint16)
+
+mint32
+UrlSuffix(gcc/PDP-11-Options.html#index-mint32-1)
+
+msoft-float
+UrlSuffix(gcc/PDP-11-Options.html#index-msoft-float-10)
+
+msplit
+UrlSuffix(gcc/PDP-11-Options.html#index-msplit)
+
+munix-asm
+UrlSuffix(gcc/PDP-11-Options.html#index-munix-asm)
+
+mlra
+UrlSuffix(gcc/PDP-11-Options.html#index-mlra-2)
+
diff --git a/gcc/config/pru/pru.opt.urls b/gcc/config/pru/pru.opt.urls
new file mode 100644
index 0000000..373b02d
--- /dev/null
+++ b/gcc/config/pru/pru.opt.urls
@@ -0,0 +1,17 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pru/pru.opt and generated HTML
+
+minrt
+UrlSuffix(gcc/PRU-Options.html#index-minrt-1)
+
+mmcu=
+UrlSuffix(gcc/PRU-Options.html#index-mmcu-2)
+
+mno-relax
+UrlSuffix(gcc/PRU-Options.html#index-mno-relax)
+
+mloop
+UrlSuffix(gcc/PRU-Options.html#index-mloop)
+
+mabi=
+UrlSuffix(gcc/PRU-Options.html#index-mabi-3)
+
diff --git a/gcc/config/riscv/riscv-vector-costs.cc b/gcc/config/riscv/riscv-vector-costs.cc
index b9fdfdc..21f8a81 100644
--- a/gcc/config/riscv/riscv-vector-costs.cc
+++ b/gcc/config/riscv/riscv-vector-costs.cc
@@ -230,6 +230,42 @@ get_biggest_mode (machine_mode mode1, machine_mode mode2)
return mode1_size >= mode2_size ? mode1 : mode2;
}
+/* Return true if the variable should be counted into liveness. */
+static bool
+variable_vectorized_p (stmt_vec_info stmt_info, tree var, bool lhs_p)
+{
+ if (!var)
+ return false;
+ gimple *stmt = STMT_VINFO_STMT (stmt_info);
+ enum stmt_vec_info_type type
+ = STMT_VINFO_TYPE (vect_stmt_to_vectorize (stmt_info));
+ if (is_gimple_call (stmt) && gimple_call_internal_p (stmt))
+ {
+ if (gimple_call_internal_fn (stmt) == IFN_MASK_STORE
+ || gimple_call_internal_fn (stmt) == IFN_MASK_LOAD)
+ {
+ /* .MASK_LOAD (_5, 32B, _33)
+ ^ ^ ^
+ Only the 3rd argument will be vectorized and consume
+ a vector register. */
+ if (TREE_CODE (TREE_TYPE (var)) == BOOLEAN_TYPE
+ || (is_gimple_reg (var) && !POINTER_TYPE_P (TREE_TYPE (var))))
+ return true;
+ else
+ return false;
+ }
+ }
+ if (lhs_p)
+ return is_gimple_reg (var)
+ && (!POINTER_TYPE_P (TREE_TYPE (var))
+ || type != store_vec_info_type);
+ else
+ return poly_int_tree_p (var)
+ || (is_gimple_val (var)
+ && (!POINTER_TYPE_P (TREE_TYPE (var))
+ || type != load_vec_info_type));
+}
+
/* Compute local live ranges of each vectorized variable.
Note that we only compute local live ranges (within a block) since
local live ranges information is accurate enough for us to determine
@@ -277,13 +313,8 @@ compute_local_live_ranges (
{
unsigned int point = program_point.point;
gimple *stmt = program_point.stmt;
- stmt_vec_info stmt_info = program_point.stmt_info;
tree lhs = gimple_get_lhs (stmt);
- enum stmt_vec_info_type type
- = STMT_VINFO_TYPE (vect_stmt_to_vectorize (stmt_info));
- if (lhs != NULL_TREE && is_gimple_reg (lhs)
- && (!POINTER_TYPE_P (TREE_TYPE (lhs))
- || type != store_vec_info_type))
+ if (variable_vectorized_p (program_point.stmt_info, lhs, true))
{
biggest_mode = get_biggest_mode (biggest_mode,
TYPE_MODE (TREE_TYPE (lhs)));
@@ -307,10 +338,8 @@ compute_local_live_ranges (
TODO: We may elide the cases that the unnecessary IMM in
the future. */
- if (poly_int_tree_p (var)
- || (is_gimple_val (var)
- && (!POINTER_TYPE_P (TREE_TYPE (var))
- || type != load_vec_info_type)))
+ if (variable_vectorized_p (program_point.stmt_info, var,
+ false))
{
biggest_mode
= get_biggest_mode (biggest_mode,
@@ -383,7 +412,9 @@ compute_nregs_for_mode (loop_vec_info loop_vinfo, machine_mode mode,
unsigned int biggest_size = GET_MODE_SIZE (biggest_mode).to_constant ();
gcc_assert (biggest_size >= mode_size);
unsigned int ratio = biggest_size / mode_size;
- return MAX (lmul / ratio, 1) * rgroup_size;
+ /* RVV mask bool modes always consume 1 vector register regardless LMUL. */
+ unsigned int nregs = mode == BImode ? 1 : lmul / ratio;
+ return MAX (nregs, 1) * rgroup_size;
}
/* This function helps to determine whether current LMUL will cause
@@ -414,7 +445,9 @@ max_number_of_live_regs (loop_vec_info loop_vinfo, const basic_block bb,
pair live_range = (*iter).second;
for (i = live_range.first + 1; i <= live_range.second; i++)
{
- machine_mode mode = TYPE_MODE (TREE_TYPE (var));
+ machine_mode mode = TREE_CODE (TREE_TYPE (var)) == BOOLEAN_TYPE
+ ? BImode
+ : TYPE_MODE (TREE_TYPE (var));
unsigned int nregs
= compute_nregs_for_mode (loop_vinfo, mode, biggest_mode, lmul);
live_vars_vec[i] += nregs;
@@ -508,8 +541,12 @@ compute_estimated_lmul (loop_vec_info loop_vinfo, machine_mode mode)
else if (known_eq (LOOP_VINFO_SLP_UNROLLING_FACTOR (loop_vinfo), 1U))
{
int estimated_vf = vect_vf_for_cost (loop_vinfo);
- return estimated_vf * GET_MODE_BITSIZE (mode).to_constant ()
- / TARGET_MIN_VLEN;
+ int estimated_lmul = estimated_vf * GET_MODE_BITSIZE (mode).to_constant ()
+ / TARGET_MIN_VLEN;
+ if (estimated_lmul > RVV_M8)
+ return regno_alignment;
+ else
+ return estimated_lmul;
}
else
{
@@ -733,6 +770,7 @@ has_unexpected_spills_p (loop_vec_info loop_vinfo)
live_ranges_per_bb, &biggest_mode);
int lmul = compute_estimated_lmul (loop_vinfo, biggest_mode);
+ gcc_assert (lmul <= RVV_M8);
/* TODO: We calculate the maximum live vars base on current STMTS
sequence. We can support live range shrink if it can give us
big improvement in the future. */
diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc
index 2e350b8..3a2ea9a 100644
--- a/gcc/config/riscv/riscv-vsetvl.cc
+++ b/gcc/config/riscv/riscv-vsetvl.cc
@@ -85,6 +85,7 @@ along with GCC; see the file COPYING3. If not see
#include "predict.h"
#include "profile-count.h"
#include "gcse.h"
+#include "cfgloop.h"
using namespace rtl_ssa;
using namespace riscv_vector;
@@ -648,6 +649,27 @@ has_no_uses (basic_block cfg_bb, rtx_insn *rinsn, int regno)
return true;
}
+/* Return true for the special block that we can't apply LCM optimization. */
+static bool
+invalid_opt_bb_p (basic_block cfg_bb)
+{
+ edge e;
+ edge_iterator ei;
+
+ /* We don't do LCM optimizations on complex edges. */
+ FOR_EACH_EDGE (e, ei, cfg_bb->preds)
+ if (e->flags & EDGE_COMPLEX)
+ return true;
+
+ /* We only do LCM optimizations on blocks that are post dominated by
+ EXIT block, that is, we don't do LCM optimizations on infinite loop. */
+ FOR_EACH_EDGE (e, ei, cfg_bb->succs)
+ if (e->flags & EDGE_FAKE)
+ return true;
+
+ return false;
+}
+
/* This flags indicates the minimum demand of the vl and vtype values by the
RVV instruction. For example, DEMAND_RATIO_P indicates that this RVV
instruction only needs the SEW/LMUL ratio to remain the same, and does not
@@ -2261,6 +2283,9 @@ public:
{
/* Initialization of RTL_SSA. */
calculate_dominance_info (CDI_DOMINATORS);
+ loop_optimizer_init (LOOPS_NORMAL);
+ /* Create FAKE edges for infinite loops. */
+ connect_infinite_loops_to_exit ();
df_analyze ();
crtl->ssa = new function_info (cfun);
m_vector_block_infos.safe_grow_cleared (last_basic_block_for_fn (cfun));
@@ -2271,6 +2296,7 @@ public:
void finish ()
{
free_dominance_info (CDI_DOMINATORS);
+ loop_optimizer_finalize ();
if (crtl->ssa->perform_pending_updates ())
cleanup_cfg (0);
delete crtl->ssa;
@@ -2785,14 +2811,11 @@ pre_vsetvl::compute_lcm_local_properties ()
for (const bb_info *bb : crtl->ssa->bbs ())
{
unsigned bb_index = bb->index ();
- edge e;
- edge_iterator ei;
- FOR_EACH_EDGE (e, ei, bb->cfg_bb ()->preds)
- if (e->flags & EDGE_COMPLEX)
- {
- bitmap_clear (m_antloc[bb_index]);
- bitmap_clear (m_transp[bb_index]);
- }
+ if (invalid_opt_bb_p (bb->cfg_bb ()))
+ {
+ bitmap_clear (m_antloc[bb_index]);
+ bitmap_clear (m_transp[bb_index]);
+ }
}
}
@@ -3305,6 +3328,10 @@ pre_vsetvl::emit_vsetvl ()
{
bool need_commit = false;
+ /* Fake edge is created by connect infinite loops to exit function.
+ We should commit vsetvl edge after fake edges removes, otherwise,
+ it will cause ICE. */
+ remove_fake_exit_edges ();
for (const bb_info *bb : crtl->ssa->bbs ())
{
for (const auto &curr_info : get_block_info (bb).local_infos)
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index c4bc9d1..6bd2236 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -2807,6 +2807,37 @@ riscv_legitimize_move (machine_mode mode, rtx dest, rtx src)
return true;
}
+ /* In order to fit NaN boxing, expand
+ (set FP_REG (reg:HF src))
+ to
+ (set (reg:SI/DI mask) (const_int -65536)
+ (set (reg:SI/DI temp) (zero_extend:SI/DI (subreg:HI (reg:HF src) 0)))
+ (set (reg:SI/DI temp) (ior:SI/DI (reg:SI/DI mask) (reg:SI/DI temp)))
+ (set (reg:HF dest) (unspec:HF [ (reg:SI/DI temp) ] UNSPEC_FMV_SFP16_X))
+ */
+
+ if (TARGET_HARD_FLOAT
+ && !TARGET_ZFHMIN && mode == HFmode
+ && REG_P (dest) && FP_REG_P (REGNO (dest))
+ && REG_P (src) && !FP_REG_P (REGNO (src))
+ && can_create_pseudo_p ())
+ {
+ rtx mask = force_reg (word_mode, gen_int_mode (-65536, word_mode));
+ rtx temp = gen_reg_rtx (word_mode);
+ emit_insn (gen_extend_insn (temp,
+ simplify_gen_subreg (HImode, src, mode, 0),
+ word_mode, HImode, 1));
+ if (word_mode == SImode)
+ emit_insn (gen_iorsi3 (temp, mask, temp));
+ else
+ emit_insn (gen_iordi3 (temp, mask, temp));
+
+ riscv_emit_move (dest, gen_rtx_UNSPEC (HFmode, gen_rtvec (1, temp),
+ UNSPEC_FMV_SFP16_X));
+
+ return true;
+ }
+
/* We need to deal with constants that would be legitimate
immediate_operands but aren't legitimate move_operands. */
if (CONSTANT_P (src) && !move_operand (src, mode))
@@ -6718,7 +6749,9 @@ riscv_for_each_saved_reg (poly_int64 sp_offset, riscv_save_restore_fn fn,
|| (TARGET_ZFINX
&& (cfun->machine->frame.mask & ~(1 << RISCV_PROLOGUE_TEMP_REGNUM)))))
{
- unsigned int fcsr_size = GET_MODE_SIZE (SImode);
+ /* Always assume FCSR occupy UNITS_PER_WORD to prevent stack
+ offset misaligned later. */
+ unsigned int fcsr_size = UNITS_PER_WORD;
if (!epilogue)
{
riscv_save_restore_reg (word_mode, regno, offset, fn);
diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md
index 0e89138..8421243 100644
--- a/gcc/config/riscv/riscv.md
+++ b/gcc/config/riscv/riscv.md
@@ -86,6 +86,9 @@
;; String unspecs
UNSPEC_STRLEN
+
+ ;; Workaround for HFmode without hardware extension
+ UNSPEC_FMV_SFP16_X
])
(define_c_enum "unspecv" [
@@ -1924,6 +1927,14 @@
(set_attr "type" "fmove")
(set_attr "mode" "HF")])
+(define_insn "*movhf_softfloat_boxing"
+ [(set (match_operand:HF 0 "register_operand" "=f")
+ (unspec:HF [(match_operand:X 1 "register_operand" " r")] UNSPEC_FMV_SFP16_X))]
+ "!TARGET_ZFHMIN"
+ "fmv.w.x\t%0,%1"
+ [(set_attr "type" "fmove")
+ (set_attr "mode" "SF")])
+
;;
;; ....................
;;
diff --git a/gcc/config/riscv/riscv.opt.urls b/gcc/config/riscv/riscv.opt.urls
new file mode 100644
index 0000000..e1ab966
--- /dev/null
+++ b/gcc/config/riscv/riscv.opt.urls
@@ -0,0 +1,91 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/riscv/riscv.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/RISC-V-Options.html#index-mbig-endian-10)
+
+mlittle-endian
+UrlSuffix(gcc/RISC-V-Options.html#index-mlittle-endian-10)
+
+mbranch-cost=
+UrlSuffix(gcc/RISC-V-Options.html#index-mbranch-cost-4)
+
+; skipping UrlSuffix for 'mplt' due to finding no URLs
+
+mabi=
+UrlSuffix(gcc/RISC-V-Options.html#index-mabi-4)
+
+mpreferred-stack-boundary=
+UrlSuffix(gcc/RISC-V-Options.html#index-mpreferred-stack-boundary)
+
+mfdiv
+UrlSuffix(gcc/RISC-V-Options.html#index-mfdiv)
+
+mdiv
+UrlSuffix(gcc/RISC-V-Options.html#index-mdiv-3)
+
+march=
+UrlSuffix(gcc/RISC-V-Options.html#index-march-14)
+
+mtune=
+UrlSuffix(gcc/RISC-V-Options.html#index-mtune-12)
+
+mcpu=
+UrlSuffix(gcc/RISC-V-Options.html#index-mcpu-8)
+
+msmall-data-limit=
+UrlSuffix(gcc/RISC-V-Options.html#index-msmall-data-limit-1)
+
+msave-restore
+UrlSuffix(gcc/RISC-V-Options.html#index-msave-restore)
+
+mshorten-memrefs
+UrlSuffix(gcc/RISC-V-Options.html#index-mshorten-memrefs)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mstrict-align
+UrlSuffix(gcc/RISC-V-Options.html#index-mstrict-align-3)
+
+; skipping UrlSuffix for 'mexplicit-relocs' due to finding no URLs
+
+mrelax
+UrlSuffix(gcc/RISC-V-Options.html#index-mrelax-5)
+
+mcsr-check
+UrlSuffix(gcc/RISC-V-Options.html#index-mcsr-check)
+
+; skipping UrlSuffix for 'momit-leaf-frame-pointer' due to finding no URLs
+
+mriscv-attribute
+UrlSuffix(gcc/RISC-V-Options.html#index-mriscv-attribute)
+
+malign-data=
+UrlSuffix(gcc/RISC-V-Options.html#index-malign-data)
+
+mstack-protector-guard=
+UrlSuffix(gcc/RISC-V-Options.html#index-mstack-protector-guard-2)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/RISC-V-Options.html#index-mstack-protector-guard-reg-1)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/RISC-V-Options.html#index-mstack-protector-guard-offset-2)
+
+misa-spec=
+UrlSuffix(gcc/RISC-V-Options.html#index-misa-spec)
+
+mmovcc
+UrlSuffix(gcc/RISC-V-Options.html#index-mmovcc)
+
+minline-atomics
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-atomics)
+
+minline-strcmp
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-strcmp)
+
+minline-strncmp
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-strncmp)
+
+minline-strlen
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-strlen)
+
diff --git a/gcc/config/riscv/t-riscv b/gcc/config/riscv/t-riscv
index 067771e..32de6b8 100644
--- a/gcc/config/riscv/t-riscv
+++ b/gcc/config/riscv/t-riscv
@@ -64,7 +64,7 @@ riscv-vsetvl.o: $(srcdir)/config/riscv/riscv-vsetvl.cc \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
$(TARGET_H) tree-pass.h df.h rtl-ssa.h cfgcleanup.h insn-config.h \
insn-attr.h insn-opinit.h tm-constrs.h cfgrtl.h cfganal.h lcm.h \
- predict.h profile-count.h \
+ predict.h profile-count.h cfgloop.h \
$(srcdir)/config/riscv/riscv-vsetvl.def
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(srcdir)/config/riscv/riscv-vsetvl.cc
diff --git a/gcc/config/riscv/vector.md b/gcc/config/riscv/vector.md
index ae39a9d..3d2c1c3 100644
--- a/gcc/config/riscv/vector.md
+++ b/gcc/config/riscv/vector.md
@@ -53,8 +53,8 @@
vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down,\
vgather,vcompress,vlsegde,vssegte,vlsegds,vssegts,vlsegdux,vlsegdox,\
vssegtux,vssegtox,vlsegdff,vandn,vbrev,vbrev8,vrev8,vclz,vctz,vrol,\
- vror,vwsll,vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\
- vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c")
+ vror,vwsll,vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\
+ vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c")
(const_string "true")]
(const_string "false")))
@@ -77,8 +77,8 @@
vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down,\
vgather,vcompress,vlsegde,vssegte,vlsegds,vssegts,vlsegdux,vlsegdox,\
vssegtux,vssegtox,vlsegdff,vandn,vbrev,vbrev8,vrev8,vclz,vctz,vrol,\
- vror,vwsll,vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\
- vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c")
+ vror,vwsll,vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\
+ vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c")
(const_string "true")]
(const_string "false")))
@@ -707,7 +707,7 @@
vired,viwred,vfredu,vfredo,vfwredu,vfwredo,vimovxv,vfmovfv,\
vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down,\
vgather,vldff,viwmuladd,vfwmuladd,vlsegde,vlsegds,vlsegdux,vlsegdox,vlsegdff,\
- vandn,vbrev,vbrev8,vrev8,vrol,vror,vwsll,vclmul,vclmulh")
+ vandn,vbrev,vbrev8,vrev8,vrol,vror,vwsll,vclmul,vclmulh")
(const_int 2)
(eq_attr "type" "vimerge,vfmerge,vcompress,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\
diff --git a/gcc/config/rl78/rl78.opt.urls b/gcc/config/rl78/rl78.opt.urls
new file mode 100644
index 0000000..96eff5f
--- /dev/null
+++ b/gcc/config/rl78/rl78.opt.urls
@@ -0,0 +1,31 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rl78/rl78.opt and generated HTML
+
+msim
+UrlSuffix(gcc/RL78-Options.html#index-msim-6)
+
+mmul=
+UrlSuffix(gcc/RL78-Options.html#index-mmul)
+
+mallregs
+UrlSuffix(gcc/RL78-Options.html#index-mallregs)
+
+; skipping UrlSuffix for 'mrelax' due to finding no URLs
+
+mcpu=
+UrlSuffix(gcc/RL78-Options.html#index-mcpu-9)
+
+mg10
+UrlSuffix(gcc/RL78-Options.html#index-mg10)
+
+mg13
+UrlSuffix(gcc/RL78-Options.html#index-mg13)
+
+mg14
+UrlSuffix(gcc/RL78-Options.html#index-mg14)
+
+mrl78
+UrlSuffix(gcc/RL78-Options.html#index-mrl78)
+
+msave-mduc-in-interrupts
+UrlSuffix(gcc/RL78-Options.html#index-msave-mduc-in-interrupts)
+
diff --git a/gcc/config/rpath.opt.urls b/gcc/config/rpath.opt.urls
new file mode 100644
index 0000000..249dfdf
--- /dev/null
+++ b/gcc/config/rpath.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rpath.opt and generated HTML
+
diff --git a/gcc/config/rs6000/476.opt.urls b/gcc/config/rs6000/476.opt.urls
new file mode 100644
index 0000000..cecf722
--- /dev/null
+++ b/gcc/config/rs6000/476.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/476.opt and generated HTML
+
diff --git a/gcc/config/rs6000/aix64.opt.urls b/gcc/config/rs6000/aix64.opt.urls
new file mode 100644
index 0000000..89600bb
--- /dev/null
+++ b/gcc/config/rs6000/aix64.opt.urls
@@ -0,0 +1,23 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/aix64.opt and generated HTML
+
+maix64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maix64)
+
+maix32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maix32)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mpe
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpe)
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+m64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m64-1)
+
+m32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
+
diff --git a/gcc/config/rs6000/darwin.opt.urls b/gcc/config/rs6000/darwin.opt.urls
new file mode 100644
index 0000000..3b7fa1a
--- /dev/null
+++ b/gcc/config/rs6000/darwin.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/darwin.opt and generated HTML
+
+ffix-and-continue
+UrlSuffix(gcc/Darwin-Options.html#index-ffix-and-continue)
+
+findirect-data
+UrlSuffix(gcc/Darwin-Options.html#index-findirect-data)
+
+m64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m64-1)
+
+m32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
+
diff --git a/gcc/config/rs6000/linux64.opt.urls b/gcc/config/rs6000/linux64.opt.urls
new file mode 100644
index 0000000..eb81aa1
--- /dev/null
+++ b/gcc/config/rs6000/linux64.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/linux64.opt and generated HTML
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
diff --git a/gcc/config/rs6000/rs6000-tables.opt.urls b/gcc/config/rs6000/rs6000-tables.opt.urls
new file mode 100644
index 0000000..a44ce0d
--- /dev/null
+++ b/gcc/config/rs6000/rs6000-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/rs6000-tables.opt and generated HTML
+
diff --git a/gcc/config/rs6000/rs6000.opt.urls b/gcc/config/rs6000/rs6000.opt.urls
new file mode 100644
index 0000000..28bf073
--- /dev/null
+++ b/gcc/config/rs6000/rs6000.opt.urls
@@ -0,0 +1,214 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/rs6000.opt and generated HTML
+
+mpowerpc64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc64)
+
+mpowerpc-gpopt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc-gpopt)
+
+mpowerpc-gfxopt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc-gfxopt)
+
+mmfcrf
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmfcrf)
+
+mpopcntb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpopcntb)
+
+mfprnd
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfprnd)
+
+mcmpb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcmpb)
+
+maltivec
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maltivec)
+
+mhard-dfp
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mhard-dfp)
+
+mmulhw
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmulhw)
+
+mdlmzb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mdlmzb)
+
+mmultiple
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmultiple)
+
+msoft-float
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msoft-float-11)
+
+mhard-float
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mhard-float-6)
+
+mpopcntd
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpopcntd)
+
+mfriz
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfriz)
+
+mveclibabi=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mveclibabi)
+
+mvsx
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mvsx)
+
+mno-update
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-update)
+
+mupdate
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mupdate)
+
+msingle-pic-base
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msingle-pic-base-1)
+
+mavoid-indexed-addresses
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mavoid-indexed-addresses)
+
+; skipping UrlSuffix for 'msched-prolog' due to finding no URLs
+
+maix-struct-return
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maix-struct-return)
+
+msvr4-struct-return
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msvr4-struct-return)
+
+mxl-compat
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mxl-compat)
+
+mrecip
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip-1)
+
+mrecip=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip-1)
+
+mrecip-precision
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip-precision)
+
+mno-fp-in-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-fp-in-toc)
+
+mno-sum-in-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-sum-in-toc)
+
+mminimal-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mminimal-toc)
+
+mfull-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfull-toc)
+
+mvrsave
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mvrsave)
+
+mblock-move-inline-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-move-inline-limit)
+
+mblock-compare-inline-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-compare-inline-limit)
+
+mblock-compare-inline-loop-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-compare-inline-loop-limit)
+
+mstring-compare-inline-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstring-compare-inline-limit)
+
+misel
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-misel)
+
+; skipping UrlSuffix for 'mdebug=' due to finding no URLs
+
+mabi=elfv1
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003delfv1)
+
+mabi=elfv2
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003delfv2)
+
+mabi=ieeelongdouble
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003dieeelongdouble)
+
+mabi=ibmlongdouble
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003dibmlongdouble)
+
+mcpu=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcpu-10)
+
+mtune=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtune-13)
+
+mtraceback=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtraceback)
+
+mlongcall
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlongcall)
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+msched-costly-dep=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msched-costly-dep)
+
+minsert-sched-nops=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-minsert-sched-nops)
+
+mprioritize-restricted-insns=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprioritize-restricted-insns)
+
+mpointers-to-nested-functions
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpointers-to-nested-functions)
+
+msave-toc-indirect
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msave-toc-indirect)
+
+mpower8-fusion
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpower8-fusion)
+
+mpower8-vector
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpower8-vector)
+
+mcrypto
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcrypto)
+
+mhtm
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mhtm)
+
+mquad-memory
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mquad-memory)
+
+mquad-memory-atomic
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mquad-memory-atomic)
+
+mcompat-align-parm
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcompat-align-parm)
+
+; skipping UrlSuffix for 'munroll-only-small-loops' due to finding no URLs
+
+mfloat128
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfloat128)
+
+mfloat128-hardware
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfloat128-hardware)
+
+mstack-protector-guard=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-3)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-reg-2)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-offset-3)
+
+mprefixed
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprefixed)
+
+mpcrel
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpcrel-1)
+
+mmma
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmma)
+
+mrop-protect
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrop-protect)
+
+mprivileged
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprivileged)
+
diff --git a/gcc/config/rs6000/sysv4.opt.urls b/gcc/config/rs6000/sysv4.opt.urls
new file mode 100644
index 0000000..f8d58d6
--- /dev/null
+++ b/gcc/config/rs6000/sysv4.opt.urls
@@ -0,0 +1,87 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/sysv4.opt and generated HTML
+
+msdata=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-2)
+
+mreadonly-in-sdata
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mreadonly-in-sdata)
+
+; skipping UrlSuffix for 'mtls-size=' due to finding no URLs
+
+mbit-align
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbit-align)
+
+mstrict-align
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstrict-align-4)
+
+mrelocatable
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable)
+
+mrelocatable-lib
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable-lib)
+
+mlittle-endian
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle-endian-11)
+
+mlittle
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle)
+
+mbig-endian
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig-endian-11)
+
+mbig
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig)
+
+mno-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-toc)
+
+mtoc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtoc)
+
+mprototype
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprototype)
+
+meabi
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-meabi)
+
+mregnames
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mregnames)
+
+msdata
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-2)
+
+msim
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msim-7)
+
+mads
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mads)
+
+myellowknife
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-myellowknife)
+
+mmvme
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmvme)
+
+memb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-memb)
+
+m64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m64-1)
+
+m32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
+
+; skipping UrlSuffix for 'mnewlib' due to finding no URLs
+
+msecure-plt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msecure-plt)
+
+mbss-plt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbss-plt)
+
+mpltseq
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpltseq)
+
+mgnu-attribute
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mgnu-attribute)
+
diff --git a/gcc/config/rtems.opt.urls b/gcc/config/rtems.opt.urls
new file mode 100644
index 0000000..211a70d
--- /dev/null
+++ b/gcc/config/rtems.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rtems.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/rx/elf.opt.urls b/gcc/config/rx/elf.opt.urls
new file mode 100644
index 0000000..c43973a
--- /dev/null
+++ b/gcc/config/rx/elf.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rx/elf.opt and generated HTML
+
+msim
+UrlSuffix(gcc/RX-Options.html#index-msim-8)
+
+mas100-syntax
+UrlSuffix(gcc/RX-Options.html#index-mas100-syntax)
+
+mint-register=
+UrlSuffix(gcc/RX-Options.html#index-mint-register)
+
+msave-acc-in-interrupts
+UrlSuffix(gcc/RX-Options.html#index-msave-acc-in-interrupts)
+
diff --git a/gcc/config/rx/rx.opt.urls b/gcc/config/rx/rx.opt.urls
new file mode 100644
index 0000000..4cb0373
--- /dev/null
+++ b/gcc/config/rx/rx.opt.urls
@@ -0,0 +1,54 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rx/rx.opt and generated HTML
+
+m64bit-doubles
+UrlSuffix(gcc/RX-Options.html#index-m64bit-doubles-1)
+
+m32bit-doubles
+UrlSuffix(gcc/RX-Options.html#index-m32bit-doubles-1)
+
+nofpu
+UrlSuffix(gcc/RX-Options.html#index-nofpu)
+
+fpu
+UrlSuffix(gcc/RX-Options.html#index-fpu)
+
+mcpu=
+UrlSuffix(gcc/RX-Options.html#index-mcpu-11)
+
+mbig-endian-data
+UrlSuffix(gcc/RX-Options.html#index-mbig-endian-data)
+
+mlittle-endian-data
+UrlSuffix(gcc/RX-Options.html#index-mlittle-endian-data)
+
+msmall-data-limit=
+UrlSuffix(gcc/RX-Options.html#index-msmall-data-limit-2)
+
+mrelax
+UrlSuffix(gcc/RX-Options.html#index-mrelax-6)
+
+mmax-constant-size=
+UrlSuffix(gcc/RX-Options.html#index-mmax-constant-size)
+
+mint-register=
+UrlSuffix(gcc/RX-Options.html#index-mint-register)
+
+msave-acc-in-interrupts
+UrlSuffix(gcc/RX-Options.html#index-msave-acc-in-interrupts)
+
+mpid
+UrlSuffix(gcc/RX-Options.html#index-mpid)
+
+mwarn-multiple-fast-interrupts
+UrlSuffix(gcc/RX-Options.html#index-mwarn-multiple-fast-interrupts)
+
+; skipping UrlSuffix for 'mgcc-abi' due to finding no URLs
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+mallow-string-insns
+UrlSuffix(gcc/RX-Options.html#index-mallow-string-insns)
+
+mjsr
+UrlSuffix(gcc/RX-Options.html#index-mjsr)
+
diff --git a/gcc/config/s390/s390.opt.urls b/gcc/config/s390/s390.opt.urls
new file mode 100644
index 0000000..ab1e761
--- /dev/null
+++ b/gcc/config/s390/s390.opt.urls
@@ -0,0 +1,92 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/s390/s390.opt and generated HTML
+
+m31
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m31)
+
+m64
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m64-2)
+
+march=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-march-15)
+
+mbackchain
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mbackchain)
+
+mdebug
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mdebug-1)
+
+mesa
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mesa)
+
+mhard-dfp
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhard-dfp-1)
+
+mhard-float
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhard-float-7)
+
+mhotpatch=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhotpatch)
+
+mlong-double-128
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mlong-double-128)
+
+mlong-double-64
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mlong-double-64)
+
+mhtm
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhtm-1)
+
+mvx
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mvx)
+
+mpacked-stack
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mpacked-stack)
+
+msmall-exec
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-msmall-exec)
+
+msoft-float
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-msoft-float-12)
+
+mstack-guard=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mstack-guard)
+
+mstack-size=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mstack-size-2)
+
+mtune=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtune-14)
+
+mmvcle
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mmvcle)
+
+mzvector
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mzvector)
+
+mwarn-dynamicstack
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mwarn-dynamicstack)
+
+mwarn-framesize=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mwarn-framesize)
+
+mzarch
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mzarch)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+; skipping UrlSuffix for 'mpic-data-is-text-relative' due to finding no URLs
+
+; skipping UrlSuffix for 'mindirect-branch=' due to finding no URLs
+
+; skipping UrlSuffix for 'mfunction-return=' due to finding no URLs
+
+; skipping UrlSuffix for 'mfentry' due to finding no URLs
+
+; skipping UrlSuffix for 'mrecord-mcount' due to finding no URLs
+
+; skipping UrlSuffix for 'mnop-mcount' due to finding no URLs
+
+; skipping UrlSuffix for 'munroll-only-small-loops' due to finding no URLs
+
diff --git a/gcc/config/s390/tpf.opt.urls b/gcc/config/s390/tpf.opt.urls
new file mode 100644
index 0000000..8322d7e
--- /dev/null
+++ b/gcc/config/s390/tpf.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/s390/tpf.opt and generated HTML
+
+mtpf-trace
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtpf-trace)
+
+mtpf-trace-skip
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtpf-trace-skip)
+
diff --git a/gcc/config/sh/sh.opt.urls b/gcc/config/sh/sh.opt.urls
new file mode 100644
index 0000000..2c3bc06
--- /dev/null
+++ b/gcc/config/sh/sh.opt.urls
@@ -0,0 +1,174 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sh/sh.opt and generated HTML
+
+m1
+UrlSuffix(gcc/SH-Options.html#index-m1)
+
+m2
+UrlSuffix(gcc/SH-Options.html#index-m2)
+
+m2a
+UrlSuffix(gcc/SH-Options.html#index-m2a)
+
+m2a-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m2a-nofpu)
+
+m2a-single
+UrlSuffix(gcc/SH-Options.html#index-m2a-single)
+
+m2a-single-only
+UrlSuffix(gcc/SH-Options.html#index-m2a-single-only)
+
+m3
+UrlSuffix(gcc/SH-Options.html#index-m3)
+
+m3e
+UrlSuffix(gcc/SH-Options.html#index-m3e)
+
+m4
+UrlSuffix(gcc/SH-Options.html#index-m4)
+
+m4-100
+UrlSuffix(gcc/SH-Options.html#index-m4-100)
+
+m4-200
+UrlSuffix(gcc/SH-Options.html#index-m4-200)
+
+m4-300
+UrlSuffix(gcc/SH-Options.html#index-m4-300)
+
+m4-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-nofpu)
+
+m4-100-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-100-nofpu)
+
+m4-200-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-200-nofpu)
+
+m4-300-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-300-nofpu)
+
+m4-340
+UrlSuffix(gcc/SH-Options.html#index-m4-340)
+
+m4-500
+UrlSuffix(gcc/SH-Options.html#index-m4-500)
+
+m4-single
+UrlSuffix(gcc/SH-Options.html#index-m4-single)
+
+m4-100-single
+UrlSuffix(gcc/SH-Options.html#index-m4-100-single)
+
+m4-200-single
+UrlSuffix(gcc/SH-Options.html#index-m4-200-single)
+
+m4-300-single
+UrlSuffix(gcc/SH-Options.html#index-m4-300-single)
+
+m4-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-single-only)
+
+m4-100-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-100-single-only)
+
+m4-200-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-200-single-only)
+
+m4-300-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-300-single-only)
+
+m4a
+UrlSuffix(gcc/SH-Options.html#index-m4a)
+
+m4a-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4a-nofpu)
+
+m4a-single
+UrlSuffix(gcc/SH-Options.html#index-m4a-single)
+
+m4a-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4a-single-only)
+
+m4al
+UrlSuffix(gcc/SH-Options.html#index-m4al)
+
+maccumulate-outgoing-args
+UrlSuffix(gcc/SH-Options.html#index-maccumulate-outgoing-args)
+
+mb
+UrlSuffix(gcc/SH-Options.html#index-mb)
+
+mbigtable
+UrlSuffix(gcc/SH-Options.html#index-mbigtable)
+
+mbitops
+UrlSuffix(gcc/SH-Options.html#index-mbitops)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+mzdcbranch
+UrlSuffix(gcc/SH-Options.html#index-mzdcbranch)
+
+mcbranch-force-delay-slot
+UrlSuffix(gcc/SH-Options.html#index-mcbranch-force-delay-slot)
+
+mdalign
+UrlSuffix(gcc/SH-Options.html#index-mdalign)
+
+; skipping UrlSuffix for 'mdiv=' due to finding no URLs
+
+; skipping UrlSuffix for 'mfdpic' due to finding no URLs
+
+mfmovd
+UrlSuffix(gcc/SH-Options.html#index-mfmovd)
+
+mfixed-range=
+UrlSuffix(gcc/SH-Options.html#index-mfixed-range-2)
+
+mieee
+UrlSuffix(gcc/SH-Options.html#index-mieee-1)
+
+minline-ic_invalidate
+UrlSuffix(gcc/SH-Options.html#index-minline-ic_005finvalidate)
+
+misize
+UrlSuffix(gcc/SH-Options.html#index-misize-1)
+
+ml
+UrlSuffix(gcc/SH-Options.html#index-ml)
+
+mnomacsave
+UrlSuffix(gcc/SH-Options.html#index-mnomacsave)
+
+mpadstruct
+UrlSuffix(gcc/SH-Options.html#index-mpadstruct)
+
+mprefergot
+UrlSuffix(gcc/SH-Options.html#index-mprefergot)
+
+mrelax
+UrlSuffix(gcc/SH-Options.html#index-mrelax-7)
+
+mrenesas
+UrlSuffix(gcc/SH-Options.html#index-mrenesas)
+
+mtas
+UrlSuffix(gcc/SH-Options.html#index-mtas)
+
+; skipping UrlSuffix for 'multcost=' due to finding no URLs
+
+musermode
+UrlSuffix(gcc/SH-Options.html#index-musermode)
+
+mpretend-cmove
+UrlSuffix(gcc/SH-Options.html#index-mpretend-cmove)
+
+mfsca
+UrlSuffix(gcc/SH-Options.html#index-mfsca)
+
+mfsrra
+UrlSuffix(gcc/SH-Options.html#index-mfsrra)
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
diff --git a/gcc/config/sh/superh.opt.urls b/gcc/config/sh/superh.opt.urls
new file mode 100644
index 0000000..c098ec1
--- /dev/null
+++ b/gcc/config/sh/superh.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sh/superh.opt and generated HTML
+
+; skipping UrlSuffix for 'mboard=' due to finding no URLs
+
diff --git a/gcc/config/sol2.opt.urls b/gcc/config/sol2.opt.urls
new file mode 100644
index 0000000..ef64d47
--- /dev/null
+++ b/gcc/config/sol2.opt.urls
@@ -0,0 +1,21 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sol2.opt and generated HTML
+
+G
+UrlSuffix(gcc/System-V-Options.html#index-G-5)
+
+mclear-hwcap
+UrlSuffix(gcc/Solaris-2-Options.html#index-mclear-hwcap)
+
+mimpure-text
+UrlSuffix(gcc/Solaris-2-Options.html#index-mimpure-text)
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-pthread-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+pthreads
+UrlSuffix(gcc/Solaris-2-Options.html#index-pthreads)
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/sparc/long-double-switch.opt.urls b/gcc/config/sparc/long-double-switch.opt.urls
new file mode 100644
index 0000000..62f5738
--- /dev/null
+++ b/gcc/config/sparc/long-double-switch.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sparc/long-double-switch.opt and generated HTML
+
+; skipping UrlSuffix for 'mlong-double-128' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-double-64' due to finding no URLs
+
diff --git a/gcc/config/sparc/sparc.opt.urls b/gcc/config/sparc/sparc.opt.urls
new file mode 100644
index 0000000..7977467
--- /dev/null
+++ b/gcc/config/sparc/sparc.opt.urls
@@ -0,0 +1,108 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sparc/sparc.opt and generated HTML
+
+mfpu
+UrlSuffix(gcc/SPARC-Options.html#index-mfpu-4)
+
+mhard-float
+UrlSuffix(gcc/SPARC-Options.html#index-mhard-float-8)
+
+msoft-float
+UrlSuffix(gcc/SPARC-Options.html#index-msoft-float-13)
+
+mflat
+UrlSuffix(gcc/SPARC-Options.html#index-mflat)
+
+munaligned-doubles
+UrlSuffix(gcc/SPARC-Options.html#index-munaligned-doubles)
+
+mapp-regs
+UrlSuffix(gcc/SPARC-Options.html#index-mapp-regs)
+
+mhard-quad-float
+UrlSuffix(gcc/SPARC-Options.html#index-mhard-quad-float)
+
+msoft-quad-float
+UrlSuffix(gcc/SPARC-Options.html#index-msoft-quad-float)
+
+mlra
+UrlSuffix(gcc/SPARC-Options.html#index-mlra-3)
+
+mv8plus
+UrlSuffix(gcc/SPARC-Options.html#index-mv8plus)
+
+mvis
+UrlSuffix(gcc/SPARC-Options.html#index-mvis)
+
+mvis2
+UrlSuffix(gcc/SPARC-Options.html#index-mvis2)
+
+mvis3
+UrlSuffix(gcc/SPARC-Options.html#index-mvis3)
+
+mvis4
+UrlSuffix(gcc/SPARC-Options.html#index-mvis4)
+
+mvis4b
+UrlSuffix(gcc/SPARC-Options.html#index-mvis4b)
+
+mcbcond
+UrlSuffix(gcc/SPARC-Options.html#index-mcbcond)
+
+mfmaf
+UrlSuffix(gcc/SPARC-Options.html#index-mfmaf)
+
+mfsmuld
+UrlSuffix(gcc/SPARC-Options.html#index-mfsmuld)
+
+mpopc
+UrlSuffix(gcc/SPARC-Options.html#index-mpopc)
+
+msubxc
+UrlSuffix(gcc/SPARC-Options.html#index-msubxc)
+
+m64
+UrlSuffix(gcc/SPARC-Options.html#index-m64-3)
+
+m32
+UrlSuffix(gcc/SPARC-Options.html#index-m32-1)
+
+mstack-bias
+UrlSuffix(gcc/SPARC-Options.html#index-mstack-bias)
+
+mfaster-structs
+UrlSuffix(gcc/SPARC-Options.html#index-mfaster-structs)
+
+; skipping UrlSuffix for 'mrelax' due to finding no URLs
+
+muser-mode
+UrlSuffix(gcc/SPARC-Options.html#index-muser-mode)
+
+mcpu=
+UrlSuffix(gcc/SPARC-Options.html#index-mcpu-12)
+
+mtune=
+UrlSuffix(gcc/SPARC-Options.html#index-mtune-15)
+
+mcmodel=
+UrlSuffix(gcc/SPARC-Options.html#index-mcmodel-1)
+
+; skipping UrlSuffix for 'mdebug=' due to finding no URLs
+
+mstd-struct-return
+UrlSuffix(gcc/SPARC-Options.html#index-mstd-struct-return)
+
+mfix-at697f
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-at697f)
+
+mfix-ut699
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-ut699)
+
+mfix-ut700
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-ut700)
+
+mfix-gr712rc
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-gr712rc)
+
+mmemory-model=
+UrlSuffix(gcc/SPARC-Options.html#index-mmemory-model)
+
diff --git a/gcc/config/stormy16/stormy16.opt.urls b/gcc/config/stormy16/stormy16.opt.urls
new file mode 100644
index 0000000..6f47d4c
--- /dev/null
+++ b/gcc/config/stormy16/stormy16.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/stormy16/stormy16.opt and generated HTML
+
+msim
+UrlSuffix(gcc/Xstormy16-Options.html#index-msim-10)
+
diff --git a/gcc/config/v850/v850.opt.urls b/gcc/config/v850/v850.opt.urls
new file mode 100644
index 0000000..dc5a831
--- /dev/null
+++ b/gcc/config/v850/v850.opt.urls
@@ -0,0 +1,60 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/v850/v850.opt and generated HTML
+
+; skipping UrlSuffix for 'mapp-regs' due to finding no URLs
+
+; skipping UrlSuffix for 'mbig-switch' due to finding no URLs
+
+; skipping UrlSuffix for 'mdebug' due to finding no URLs
+
+; skipping UrlSuffix for 'mdisable-callt' due to finding no URLs
+
+; skipping UrlSuffix for 'mep' due to finding no URLs
+
+; skipping UrlSuffix for 'mghs' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-calls' due to finding no URLs
+
+; skipping UrlSuffix for 'mprolog-function' due to finding no URLs
+
+; skipping UrlSuffix for 'msda=' due to finding no URLs
+
+; skipping UrlSuffix for 'mspace' due to finding no URLs
+
+; skipping UrlSuffix for 'mtda=' due to finding no URLs
+
+; skipping UrlSuffix for 'mno-strict-align' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e1' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850es' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e2' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e2v3' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e3v5' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e2v4' due to finding no URLs
+
+; skipping UrlSuffix for 'mloop' due to finding no URLs
+
+; skipping UrlSuffix for 'mzda=' due to finding no URLs
+
+; skipping UrlSuffix for 'mrelax' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-jumps' due to finding no URLs
+
+; skipping UrlSuffix for 'msoft-float' due to finding no URLs
+
+; skipping UrlSuffix for 'mhard-float' due to finding no URLs
+
+; skipping UrlSuffix for 'mrh850-abi' due to finding no URLs
+
+; skipping UrlSuffix for 'mgcc-abi' due to finding no URLs
+
+; skipping UrlSuffix for 'm8byte-align' due to finding no URLs
+
diff --git a/gcc/config/vax/elf.opt.urls b/gcc/config/vax/elf.opt.urls
new file mode 100644
index 0000000..0903513
--- /dev/null
+++ b/gcc/config/vax/elf.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vax/elf.opt and generated HTML
+
diff --git a/gcc/config/vax/vax.opt.urls b/gcc/config/vax/vax.opt.urls
new file mode 100644
index 0000000..c6b1c41
--- /dev/null
+++ b/gcc/config/vax/vax.opt.urls
@@ -0,0 +1,10 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vax/vax.opt and generated HTML
+
+; skipping UrlSuffix for 'mg' due to finding no URLs
+
+; skipping UrlSuffix for 'mgnu' due to finding no URLs
+
+; skipping UrlSuffix for 'munix' due to finding no URLs
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
diff --git a/gcc/config/visium/visium.opt.urls b/gcc/config/visium/visium.opt.urls
new file mode 100644
index 0000000..38ba88d
--- /dev/null
+++ b/gcc/config/visium/visium.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/visium/visium.opt and generated HTML
+
+mdebug
+UrlSuffix(gcc/Visium-Options.html#index-mdebug-2)
+
+msim
+UrlSuffix(gcc/Visium-Options.html#index-msim-9)
+
+mfpu
+UrlSuffix(gcc/Visium-Options.html#index-mfpu-5)
+
+mhard-float
+UrlSuffix(gcc/Visium-Options.html#index-mhard-float-10)
+
+msoft-float
+UrlSuffix(gcc/Visium-Options.html#index-msoft-float-15)
+
+mcpu=
+UrlSuffix(gcc/Visium-Options.html#index-mcpu-13)
+
+mtune=
+UrlSuffix(gcc/Visium-Options.html#index-mtune-16)
+
+msv-mode
+UrlSuffix(gcc/Visium-Options.html#index-msv-mode)
+
+muser-mode
+UrlSuffix(gcc/Visium-Options.html#index-muser-mode-1)
+
diff --git a/gcc/config/vms/vms.opt.urls b/gcc/config/vms/vms.opt.urls
new file mode 100644
index 0000000..177b281
--- /dev/null
+++ b/gcc/config/vms/vms.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vms/vms.opt and generated HTML
+
+mmalloc64
+UrlSuffix(gcc/VMS-Options.html#index-mmalloc64)
+
+mvms-return-codes
+UrlSuffix(gcc/VMS-Options.html#index-mvms-return-codes)
+
diff --git a/gcc/config/vxworks-smp.opt.urls b/gcc/config/vxworks-smp.opt.urls
new file mode 100644
index 0000000..0a91011
--- /dev/null
+++ b/gcc/config/vxworks-smp.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vxworks-smp.opt and generated HTML
+
+msmp
+UrlSuffix(gcc/VxWorks-Options.html#index-msmp)
+
diff --git a/gcc/config/vxworks.opt.urls b/gcc/config/vxworks.opt.urls
new file mode 100644
index 0000000..52888d0
--- /dev/null
+++ b/gcc/config/vxworks.opt.urls
@@ -0,0 +1,20 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vxworks.opt and generated HTML
+
+Bdynamic
+UrlSuffix(gcc/VxWorks-Options.html#index-Bdynamic)
+
+Bstatic
+UrlSuffix(gcc/VxWorks-Options.html#index-Bstatic)
+
+Xbind-lazy
+UrlSuffix(gcc/VxWorks-Options.html#index-Xbind-lazy)
+
+Xbind-now
+UrlSuffix(gcc/VxWorks-Options.html#index-Xbind-now)
+
+mrtp
+UrlSuffix(gcc/VxWorks-Options.html#index-mrtp)
+
+non-static
+UrlSuffix(gcc/VxWorks-Options.html#index-non-static)
+
diff --git a/gcc/config/xtensa/elf.opt.urls b/gcc/config/xtensa/elf.opt.urls
new file mode 100644
index 0000000..6774ada
--- /dev/null
+++ b/gcc/config/xtensa/elf.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/xtensa/elf.opt and generated HTML
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/xtensa/uclinux.opt.urls b/gcc/config/xtensa/uclinux.opt.urls
new file mode 100644
index 0000000..bd69ce5
--- /dev/null
+++ b/gcc/config/xtensa/uclinux.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/xtensa/uclinux.opt and generated HTML
+
diff --git a/gcc/config/xtensa/xtensa.opt.urls b/gcc/config/xtensa/xtensa.opt.urls
new file mode 100644
index 0000000..146db23
--- /dev/null
+++ b/gcc/config/xtensa/xtensa.opt.urls
@@ -0,0 +1,37 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/xtensa/xtensa.opt and generated HTML
+
+mconst16
+UrlSuffix(gcc/Xtensa-Options.html#index-mconst16)
+
+mforce-no-pic
+UrlSuffix(gcc/Xtensa-Options.html#index-mforce-no-pic)
+
+mlongcalls
+UrlSuffix(gcc/Xtensa-Options.html#index-mlongcalls)
+
+mextra-l32r-costs=
+UrlSuffix(gcc/Xtensa-Options.html#index-mextra-l32r-costs)
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+mtarget-align
+UrlSuffix(gcc/Xtensa-Options.html#index-mtarget-align)
+
+mtext-section-literals
+UrlSuffix(gcc/Xtensa-Options.html#index-mtext-section-literals)
+
+mauto-litpools
+UrlSuffix(gcc/Xtensa-Options.html#index-mauto-litpools)
+
+mserialize-volatile
+UrlSuffix(gcc/Xtensa-Options.html#index-mserialize-volatile)
+
+mabi=call0
+UrlSuffix(gcc/Xtensa-Options.html#index-mabi_003dcall0)
+
+mabi=windowed
+UrlSuffix(gcc/Xtensa-Options.html#index-mabi_003dwindowed)
+
+mstrict-align
+UrlSuffix(gcc/Xtensa-Options.html#index-mstrict-align-5)
+
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index dc0c0df..8bc7b09 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,14 @@
+2024-01-03 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/113064
+ * call.cc (reference_binding): Still try a conversion via a
+ temporary if a direct conversion was bad.
+
+2024-01-03 Kwok Cheung Yeung <kcy@codesourcery.com>
+
+ * parser.cc (cp_parser_omp_clause_name): Move handling of indirect
+ clause to correspond to alphabetical order.
+
Copyright (C) 2024 Free Software Foundation, Inc.
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc
index d9ddd36..1c67572 100644
--- a/gcc/cp/call.cc
+++ b/gcc/cp/call.cc
@@ -1739,6 +1739,7 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
tsubst_flags_t complain)
{
conversion *conv = NULL;
+ conversion *bad_direct_conv = nullptr;
tree to = TREE_TYPE (rto);
tree from = rfrom;
tree tfrom;
@@ -1925,13 +1926,23 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags,
complain);
if (cand)
- return cand->second_conv;
+ {
+ if (!cand->second_conv->bad_p)
+ return cand->second_conv;
+
+ /* Direct reference binding wasn't successful and yielded a bad
+ conversion. Proceed with trying to go through a temporary
+ instead, and if that also fails then we'll return this bad
+ conversion rather than no conversion for sake of better
+ diagnostics. */
+ bad_direct_conv = cand->second_conv;
+ }
}
/* From this point on, we conceptually need temporaries, even if we
elide them. Only the cases above are "direct bindings". */
if (flags & LOOKUP_NO_TEMP_BIND)
- return NULL;
+ return bad_direct_conv ? bad_direct_conv : nullptr;
/* [over.ics.rank]
@@ -1972,6 +1983,9 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
there's no strictly viable candidate. */
if (!maybe_valid_p && (flags & LOOKUP_SHORTCUT_BAD_CONVS))
{
+ if (bad_direct_conv)
+ return bad_direct_conv;
+
conv = alloc_conversion (ck_deferred_bad);
conv->bad_p = true;
return conv;
@@ -1995,7 +2009,7 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
conv = implicit_conversion (to, from, expr, c_cast_p,
flags, complain);
if (!conv)
- return NULL;
+ return bad_direct_conv ? bad_direct_conv : nullptr;
if (conv->user_conv_p)
{
@@ -2018,7 +2032,7 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
= reference_binding (rto, ftype, NULL_TREE, c_cast_p,
sflags, complain);
if (!new_second)
- return NULL;
+ return bad_direct_conv ? bad_direct_conv : nullptr;
conv = merge_conversion_sequences (t, new_second);
gcc_assert (maybe_valid_p || conv->bad_p);
return conv;
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index 1a6b539..37536fa 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -37645,10 +37645,10 @@ cp_parser_omp_clause_name (cp_parser *parser)
result = PRAGMA_OMP_CLAUSE_IN_REDUCTION;
else if (!strcmp ("inbranch", p))
result = PRAGMA_OMP_CLAUSE_INBRANCH;
- else if (!strcmp ("indirect", p))
- result = PRAGMA_OMP_CLAUSE_INDIRECT;
else if (!strcmp ("independent", p))
result = PRAGMA_OACC_CLAUSE_INDEPENDENT;
+ else if (!strcmp ("indirect", p))
+ result = PRAGMA_OMP_CLAUSE_INDIRECT;
else if (!strcmp ("is_device_ptr", p))
result = PRAGMA_OMP_CLAUSE_IS_DEVICE_PTR;
break;
diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog
index dc0c0df..20365ea 100644
--- a/gcc/d/ChangeLog
+++ b/gcc/d/ChangeLog
@@ -1,3 +1,7 @@
+2024-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ * gdc.texi: Bump @copyrights-d year.
+
Copyright (C) 2024 Free Software Foundation, Inc.
diff --git a/gcc/d/lang.opt.urls b/gcc/d/lang.opt.urls
new file mode 100644
index 0000000..09b2a26
--- /dev/null
+++ b/gcc/d/lang.opt.urls
@@ -0,0 +1,223 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/d/lang.opt and generated HTML
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H) LangUrlSuffix_D(gdc/Code-Generation.html#index-H)
+
+Hd
+LangUrlSuffix_D(gdc/Code-Generation.html#index-Hd)
+
+Hf
+LangUrlSuffix_D(gdc/Code-Generation.html#index-Hf)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+J
+LangUrlSuffix_D(gdc/Directory-Options.html#index-J)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF) LangUrlSuffix_D(gdc/Code-Generation.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG) LangUrlSuffix_D(gdc/Code-Generation.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM) LangUrlSuffix_D(gdc/Code-Generation.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP) LangUrlSuffix_D(gdc/Code-Generation.html#index-MP)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT) LangUrlSuffix_D(gdc/Code-Generation.html#index-MT)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ) LangUrlSuffix_D(gdc/Code-Generation.html#index-MQ)
+
+Waddress
+UrlSuffix(gcc/Warning-Options.html#index-Waddress)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+; duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+; duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Walloca
+UrlSuffix(gcc/Warning-Options.html#index-Walloca) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca)
+
+Walloca-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloca-larger-than_003d) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca-larger-than)
+
+Wbuiltin-declaration-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-mismatch) LangUrlSuffix_D(gdc/Warnings.html#index-Wbuiltin-declaration-mismatch)
+
+Wcast-result
+LangUrlSuffix_D(gdc/Warnings.html#index-Wcast-result)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated) LangUrlSuffix_D(gdc/Warnings.html#index-Wdeprecated)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror) LangUrlSuffix_D(gdc/Warnings.html#index-Werror)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra)
+
+Wmismatched-special-enum
+LangUrlSuffix_D(gdc/Warnings.html#index-Wmismatched-special-enum)
+
+Wspeculative
+LangUrlSuffix_D(gdc/Warnings.html#index-Wno-speculative)
+
+Wunknown-pragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unknown-pragmas) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-unknown-pragmas)
+
+Wvarargs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-varargs) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-varargs)
+
+X
+LangUrlSuffix_D(gdc/Code-Generation.html#index-X)
+
+Xf
+LangUrlSuffix_D(gdc/Code-Generation.html#index-Xf)
+
+debuglib=
+LangUrlSuffix_D(gdc/Linking.html#index-debuglib_003d)
+
+defaultlib=
+LangUrlSuffix_D(gdc/Linking.html#index-defaultlib_003d)
+
+fall-instantiations
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fall-instantiations)
+
+fassert
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fassert)
+
+fbounds-check
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fbounds-check)
+
+fbounds-check=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fbounds-check)
+
+; skipping UrlSuffix for 'fbuiltin' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-fbuiltin'
+; duplicate: 'gcc/Other-Builtins.html#index-fno-builtin-3'
+; duplicate: 'gcc/Warning-Options.html#index-fno-builtin-1'
+; skipping LangUrlSuffix_D for 'fbuiltin' due to multiple URLs:
+; duplicate: 'gdc/Other-Builtins.html#index-fno-builtin-1'
+; duplicate: 'gdc/Runtime-Options.html#index-fbuiltin'
+
+fcheckaction=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fcheckaction)
+
+fdebug
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fdebug)
+
+fdebug=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fdebug)
+
+fdoc
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fdoc)
+
+fdoc-dir=
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fdoc-dir)
+
+fdoc-file=
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fdoc-file)
+
+fdoc-inc=
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fdoc-inc)
+
+fdruntime
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fdruntime)
+
+fdump-d-original
+LangUrlSuffix_D(gdc/Developer-Options.html#index-fdump-d-original)
+
+fexceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
+
+fextern-std=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fextern-std)
+
+fignore-unknown-pragmas
+LangUrlSuffix_D(gdc/Warnings.html#index-fignore-unknown-pragmas)
+
+finvariants
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-finvariants)
+
+fmain
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fmain)
+
+fmodule-file=
+LangUrlSuffix_D(gdc/Directory-Options.html#index-fmodule-file)
+
+fmoduleinfo
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fmoduleinfo)
+
+fonly=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fonly)
+
+fpostconditions
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-postconditions)
+
+fpreconditions
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-preconditions)
+
+frelease
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-release)
+
+frtti
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti) LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-rtti)
+
+fsave-mixins=
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fsave-mixins)
+
+fswitch-errors
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-switch-errors)
+
+funittest
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-unittest)
+
+fversion=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fversion)
+
+fweak-templates
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-weak-templates)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib) LangUrlSuffix_D(gdc/Directory-Options.html#index-imultilib)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+nophoboslib
+LangUrlSuffix_D(gdc/Linking.html#index-nophoboslib)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc) LangUrlSuffix_D(gdc/Directory-Options.html#index-nostdinc)
+
+static-libphobos
+LangUrlSuffix_D(gdc/Linking.html#index-static-libphobos)
+
+shared-libphobos
+LangUrlSuffix_D(gdc/Linking.html#index-shared-libphobos)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v) LangUrlSuffix_D(gdc/Developer-Options.html#index-v)
+
diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc
index 161a6b7..307b2f5 100644
--- a/gcc/diagnostic-format-sarif.cc
+++ b/gcc/diagnostic-format-sarif.cc
@@ -184,8 +184,6 @@ private:
void set_any_logical_locs_arr (json::object *location_obj,
const logical_location *logical_loc);
json::object *make_location_object (const diagnostic_event &event);
- json::object *
- make_logical_location_object (const logical_location &logical_loc) const;
json::object *make_code_flow_object (const diagnostic_path &path);
json::object *
make_thread_flow_location_object (const diagnostic_event &event,
@@ -754,7 +752,7 @@ set_any_logical_locs_arr (json::object *location_obj,
{
if (!logical_loc)
return;
- json::object *logical_loc_obj = make_logical_location_object (*logical_loc);
+ json::object *logical_loc_obj = make_sarif_logical_location_object (*logical_loc);
json::array *location_locs_arr = new json::array ();
location_locs_arr->append (logical_loc_obj);
location_obj->set ("logicalLocations", location_locs_arr);
@@ -1092,8 +1090,7 @@ maybe_get_sarif_kind (enum logical_location_kind kind)
or return NULL. */
json::object *
-sarif_builder::
-make_logical_location_object (const logical_location &logical_loc) const
+make_sarif_logical_location_object (const logical_location &logical_loc)
{
json::object *logical_loc_obj = new json::object ();
@@ -1163,7 +1160,11 @@ json::object *
sarif_builder::make_thread_flow_location_object (const diagnostic_event &ev,
int path_event_idx)
{
- json::object *thread_flow_loc_obj = new json::object ();
+ sarif_object *thread_flow_loc_obj = new sarif_object ();
+
+ /* Give diagnostic_event subclasses a chance to add custom properties
+ via a property bag. */
+ ev.maybe_add_sarif_properties (*thread_flow_loc_obj);
/* "location" property (SARIF v2.1.0 section 3.38.3). */
json::object *location_obj = make_location_object (ev);
diff --git a/gcc/diagnostic-format-sarif.h b/gcc/diagnostic-format-sarif.h
index 1ee49d4..fdbbd93 100644
--- a/gcc/diagnostic-format-sarif.h
+++ b/gcc/diagnostic-format-sarif.h
@@ -23,6 +23,8 @@ along with GCC; see the file COPYING3. If not see
#include "json.h"
+class logical_location;
+
/* Concrete subclass of json::object for SARIF property bags
(SARIF v2.1.0 section 3.8). */
@@ -42,4 +44,7 @@ public:
sarif_property_bag &get_or_create_properties ();
};
+extern json::object *
+make_sarif_logical_location_object (const logical_location &logical_loc);
+
#endif /* ! GCC_DIAGNOSTIC_FORMAT_SARIF_H */
diff --git a/gcc/diagnostic-path.h b/gcc/diagnostic-path.h
index 7f271ef..fb7abe8 100644
--- a/gcc/diagnostic-path.h
+++ b/gcc/diagnostic-path.h
@@ -24,6 +24,8 @@ along with GCC; see the file COPYING3. If not see
#include "diagnostic.h" /* for ATTRIBUTE_GCC_DIAG. */
#include "diagnostic-event-id.h"
+class sarif_object;
+
/* A diagnostic_path is an optional additional piece of metadata associated
with a diagnostic (via its rich_location).
@@ -157,6 +159,13 @@ class diagnostic_event
virtual meaning get_meaning () const = 0;
virtual diagnostic_thread_id_t get_thread_id () const = 0;
+
+ /* Hook for SARIF output to allow for adding diagnostic-specific
+ properties to the threadFlowLocation object's property bag. */
+ virtual void
+ maybe_add_sarif_properties (sarif_object &/*thread_flow_loc_obj*/) const
+ {
+ }
};
/* Abstract base class representing a thread of execution within
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index 566772c..0a7c7e0 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -186,7 +186,8 @@ typedef char *(*diagnostic_make_option_name_cb) (const diagnostic_context *,
diagnostic_t,
diagnostic_t);
typedef char *(*diagnostic_make_option_url_cb) (const diagnostic_context *,
- int);
+ int,
+ unsigned);
class edit_context;
namespace json { class value; }
@@ -526,7 +527,8 @@ public:
{
if (!m_option_callbacks.m_make_option_url_cb)
return nullptr;
- return m_option_callbacks.m_make_option_url_cb (this, option_index);
+ return m_option_callbacks.m_make_option_url_cb (this, option_index,
+ get_lang_mask ());
}
void
diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi
index ca0e96c..01f3acf 100644
--- a/gcc/doc/options.texi
+++ b/gcc/doc/options.texi
@@ -597,4 +597,30 @@ This warning option corresponds to @code{cpplib.h} warning reason code
@var{CPP_W_Enum}. This should only be used for warning options of the
C-family front-ends.
+@item UrlSuffix(@var{url_suffix})
+Adjacent to each human-written @code{.opt} file in the source tree is
+a corresponding file with a @code{.opt.urls} extension. These files
+contain @code{UrlSuffix} directives giving the ending part of the URL
+for the documentation of the option, such as:
+
+@smallexample
+Wabi-tag
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
+@end smallexample
+
+These URL suffixes are relative to @code{DOCUMENTATION_ROOT_URL}.
+
+There files are generated from the @code{.opt} files and the generated
+HTML documentation by @code{regenerate-opt-urls.py}, and should be
+regenerated when adding new options, via manually invoking
+@code{make regenerate-opt-urls}.
+
+@item LangUrlSuffix_@var{lang}(@var{url_suffix})
+In addition to @code{UrlSuffix} directives, @code{regenerate-opt-urls.py}
+can generate language-specific URLs, such as:
+
+@smallexample
+LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+@end smallexample
+
@end table
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 152b0397..3a394e7 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -585,6 +585,11 @@ The front end's manuals should be mentioned in
and the online manuals should be linked to from
@file{onlinedocs/index.html}.
@item
+If the front end has its own manual with its own index of options, the
+generated @file{Option-Index.html} should be added to
+@code{PER_LANGUAGE_OPTION_INDEXES} in @file{gcc/regenerate-opt-urls.py}
+and to @code{OPT_URLS_HTML_DEPS} in @file{gcc/Makefile.in}.
+@item
Any old releases or CVS repositories of the front end, before its
inclusion in GCC, should be made available on the GCC web site at
@uref{https://gcc.gnu.org/pub/gcc/old-releases/}.
@@ -813,6 +818,10 @@ options supported by this target (@pxref{Run-time Target, , Run-time
Target Specification}). This means both entries in the summary table
of options and details of the individual options.
@item
+An entry in @file{gcc/regenerate-opt-urls.py}'s TARGET_SPECIFIC_PAGES
+dictionary mapping from target-specific HTML documentation pages
+to the target specific source directory.
+@item
Documentation in @file{gcc/doc/extend.texi} for any target-specific
attributes supported (@pxref{Target Attributes, , Defining
target-specific uses of @code{__attribute__}}), including where the
diff --git a/gcc/expr.cc b/gcc/expr.cc
index 4f42c0f..dc816bc 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -6272,19 +6272,32 @@ expand_assignment (tree to, tree from, bool nontemporal)
&& known_eq (bitpos, 0)
&& known_eq (bitsize, GET_MODE_BITSIZE (GET_MODE (to_rtx))))
result = store_expr (from, to_rtx, 0, nontemporal, false);
- else
+ /* Check if the field overlaps the MSB, requiring extension. */
+ else if (maybe_eq (bitpos + bitsize,
+ GET_MODE_BITSIZE (GET_MODE (to_rtx))))
{
- rtx to_rtx1
- = lowpart_subreg (subreg_unpromoted_mode (to_rtx),
- SUBREG_REG (to_rtx),
- subreg_promoted_mode (to_rtx));
+ scalar_int_mode imode = subreg_unpromoted_mode (to_rtx);
+ scalar_int_mode omode = subreg_promoted_mode (to_rtx);
+ rtx to_rtx1 = lowpart_subreg (imode, SUBREG_REG (to_rtx),
+ omode);
result = store_field (to_rtx1, bitsize, bitpos,
bitregion_start, bitregion_end,
mode1, from, get_alias_set (to),
nontemporal, reversep);
+ /* If the target usually keeps IMODE appropriately
+ extended in OMODE it's unsafe to refer to it using
+ a SUBREG whilst this invariant doesn't hold. */
+ if (targetm.mode_rep_extended (imode, omode) != UNKNOWN)
+ to_rtx1 = simplify_gen_unary (TRUNCATE, imode,
+ SUBREG_REG (to_rtx), omode);
convert_move (SUBREG_REG (to_rtx), to_rtx1,
SUBREG_PROMOTED_SIGN (to_rtx));
}
+ else
+ result = store_field (to_rtx, bitsize, bitpos,
+ bitregion_start, bitregion_end,
+ mode1, from, get_alias_set (to),
+ nontemporal, reversep);
}
else
result = store_field (to_rtx, bitsize, bitpos,
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index dc0c0df..6c2f890 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,17 @@
+2024-01-03 Harald Anlauf <anlauf@gmx.de>
+
+ * trans-types.cc (gfc_get_nodesc_array_type): Clear used gmp
+ variables.
+
+2024-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ * gfortranspec.cc (lang_specific_driver): Update copyright notice
+ dates.
+ * gfc-internals.texi: Bump @copying's copyright year.
+ * gfortran.texi: Ditto.
+ * intrinsic.texi: Ditto.
+ * invoke.texi: Ditto.
+
Copyright (C) 2024 Free Software Foundation, Inc.
diff --git a/gcc/fortran/lang.opt.urls b/gcc/fortran/lang.opt.urls
new file mode 100644
index 0000000..e335b42
--- /dev/null
+++ b/gcc/fortran/lang.opt.urls
@@ -0,0 +1,167 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/fortran/lang.opt and generated HTML
+
+A
+UrlSuffix(gcc/Preprocessor-Options.html#index-A)
+
+C
+UrlSuffix(gcc/Preprocessor-Options.html#index-C)
+
+CC
+UrlSuffix(gcc/Preprocessor-Options.html#index-CC)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping UrlSuffix for 'E' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-E-1'
+; duplicate: 'gcc/Overall-Options.html#index-E'
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H) LangUrlSuffix_D(gdc/Code-Generation.html#index-H)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+J
+LangUrlSuffix_D(gdc/Directory-Options.html#index-J)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF) LangUrlSuffix_D(gdc/Code-Generation.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG) LangUrlSuffix_D(gdc/Code-Generation.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM) LangUrlSuffix_D(gdc/Code-Generation.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP) LangUrlSuffix_D(gdc/Code-Generation.html#index-MP)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT) LangUrlSuffix_D(gdc/Code-Generation.html#index-MT)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ) LangUrlSuffix_D(gdc/Code-Generation.html#index-MQ)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+U
+UrlSuffix(gcc/Preprocessor-Options.html#index-U)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+; duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+; duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Wdate-time
+UrlSuffix(gcc/Warning-Options.html#index-Wdate-time)
+
+Wconversion
+UrlSuffix(gcc/Warning-Options.html#index-Wconversion)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wmissing-include-dirs
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-include-dirs)
+
+Wopenacc-parallelism
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openacc-parallelism)
+
+Wopenmp
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openmp)
+
+Wopenmp-simd
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openmp-simd)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+; skipping UrlSuffix for 'nocpp' due to finding no URLs
+
+; skipping UrlSuffix for 'd' due to multiple URLs:
+; duplicate: 'gcc/Developer-Options.html#index-d-1'
+; duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+ff2c
+LangUrlSuffix_Fortran(gfortran/Code-Gen-Options.html#index-ff2c)
+
+fopenacc
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc) LangUrlSuffix_Fortran(gfortran/Fortran-Dialect-Options.html#index-fopenacc)
+
+fopenacc-dim=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc-dim)
+
+fopenmp
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp) LangUrlSuffix_Fortran(gfortran/Fortran-Dialect-Options.html#index-fopenmp)
+
+fopenmp-simd
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-simd) LangUrlSuffix_Fortran(gfortran/Fortran-Dialect-Options.html#index-fopenmp-simd)
+
+fopenmp-allocators
+LangUrlSuffix_Fortran(gfortran/Fortran-Dialect-Options.html#index-fopenmp-allocators)
+
+fpreprocessed
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpreprocessed)
+
+; skipping UrlSuffix for 'fshort-enums' due to multiple URLs:
+; duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+; duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+; duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+fworking-directory
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-working-directory)
+
+idirafter
+UrlSuffix(gcc/Directory-Options.html#index-idirafter)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib) LangUrlSuffix_D(gdc/Directory-Options.html#index-imultilib)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix)
+
+iquote
+UrlSuffix(gcc/Directory-Options.html#index-iquote)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc) LangUrlSuffix_D(gdc/Directory-Options.html#index-nostdinc)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
+undef
+UrlSuffix(gcc/Preprocessor-Options.html#index-undef)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v) LangUrlSuffix_D(gdc/Developer-Options.html#index-v)
+
diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index e6db1c9..676014e 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -1795,7 +1795,7 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed,
TYPE_LANG_SPECIFIC (type) = TYPE_LANG_SPECIFIC (TREE_TYPE (type));
}
- return type;
+ goto array_type_done;
}
if (known_stride)
@@ -1814,10 +1814,6 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed,
layout_type (type);
- mpz_clear (offset);
- mpz_clear (stride);
- mpz_clear (delta);
-
/* Represent packed arrays as multi-dimensional if they have rank >
1 and with proper bounds, instead of flat arrays. This makes for
better debug info. */
@@ -1848,6 +1844,12 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed,
GFC_ARRAY_TYPE_P (type) = 1;
TYPE_LANG_SPECIFIC (type) = TYPE_LANG_SPECIFIC (TREE_TYPE (type));
}
+
+array_type_done:
+ mpz_clear (offset);
+ mpz_clear (stride);
+ mpz_clear (delta);
+
return type;
}
diff --git a/gcc/gcc-urlifier.cc b/gcc/gcc-urlifier.cc
index 877445c..6bd176f 100644
--- a/gcc/gcc-urlifier.cc
+++ b/gcc/gcc-urlifier.cc
@@ -24,6 +24,8 @@ along with GCC; see the file COPYING3. If not see
#include "pretty-print.h"
#include "pretty-print-urlifier.h"
#include "gcc-urlifier.h"
+#include "opts.h"
+#include "options.h"
#include "selftest.h"
namespace {
@@ -34,23 +36,34 @@ namespace {
class gcc_urlifier : public urlifier
{
public:
+ gcc_urlifier (unsigned int lang_mask)
+ : m_lang_mask (lang_mask)
+ {}
+
char *get_url_for_quoted_text (const char *p, size_t sz) const final override;
- const char *get_url_suffix_for_quoted_text (const char *p, size_t sz) const;
+ label_text get_url_suffix_for_quoted_text (const char *p, size_t sz) const;
/* We use ATTRIBUTE_UNUSED as this helper is called only from ASSERTs. */
- const char *get_url_suffix_for_quoted_text (const char *p) const ATTRIBUTE_UNUSED;
+ label_text get_url_suffix_for_quoted_text (const char *p) const ATTRIBUTE_UNUSED;
private:
+ label_text get_url_suffix_for_option (const char *p, size_t sz) const;
+
static char *
make_doc_url (const char *doc_url_suffix);
+
+ unsigned int m_lang_mask;
};
/* class gcc_urlifier : public urlifier. */
+/* Manage a hard-coded mapping from quoted string to URL suffixes
+ in gcc-urlifier.def */
+
#define DOC_URL(QUOTED_TEXT, URL_SUFFIX) \
{ (QUOTED_TEXT), (URL_SUFFIX) }
-const struct
+static const struct
{
const char *quoted_text;
const char *url_suffix;
@@ -60,32 +73,53 @@ const struct
};
+/* Implementation of urlifier::get_url_for_quoted_text vfunc for GCC
+ diagnostics. */
+
char *
gcc_urlifier::get_url_for_quoted_text (const char *p, size_t sz) const
{
- if (const char *url_suffix = get_url_suffix_for_quoted_text (p, sz))
- return make_doc_url (url_suffix);
+ label_text url_suffix = get_url_suffix_for_quoted_text (p, sz);
+ if (url_suffix.get ())
+ return make_doc_url (url_suffix.get ());
return nullptr;
}
-const char *
+/* Look for a URL for the quoted string (P, SZ).
+ Return the url suffix if found, or nullptr otherwise. */
+
+label_text
gcc_urlifier::get_url_suffix_for_quoted_text (const char *p, size_t sz) const
{
- /* Binary search. This assumes that the quoted_text fields of doc_urls
+ if (sz == 0)
+ return label_text ();
+
+ /* If this is an option, look up the option and see if we have
+ a URL for it. */
+ if (p[0] == '-')
+ {
+ label_text suffix = get_url_suffix_for_option (p, sz);
+ if (suffix.get ())
+ return suffix;
+ }
+
+ /* Otherwise, look within the hard-coded data table in gcc-urlifier.def.
+
+ Binary search. This assumes that the quoted_text fields of doc_urls
are in sorted order. */
int min = 0;
int max = ARRAY_SIZE (doc_urls) - 1;
while (true)
{
if (min > max)
- return nullptr;
+ return label_text ();
int midpoint = (min + max) / 2;
gcc_assert ((size_t)midpoint < ARRAY_SIZE (doc_urls));
int cmp = strncmp (p, doc_urls[midpoint].quoted_text, sz);
if (cmp == 0)
{
if (doc_urls[midpoint].quoted_text[sz] == '\0')
- return doc_urls[midpoint].url_suffix;
+ return label_text::borrow (doc_urls[midpoint].url_suffix);
else
max = midpoint - 1;
}
@@ -94,15 +128,45 @@ gcc_urlifier::get_url_suffix_for_quoted_text (const char *p, size_t sz) const
else
min = midpoint + 1;
}
- return nullptr;
+
+ /* Not found. */
+ return label_text ();
}
-const char *
+/* For use in selftests. */
+
+label_text
gcc_urlifier::get_url_suffix_for_quoted_text (const char *p) const
{
return get_url_suffix_for_quoted_text (p, strlen (p));
}
+/* Look for a URL for the quoted string (P, SZ) that appears to be
+ an option.
+ Return the url suffix if found, or nullptr otherwise. */
+
+label_text
+gcc_urlifier::get_url_suffix_for_option (const char *p, size_t sz) const
+{
+ /* Look up this option
+
+ find_opt does a binary search, taking a 0-terminated string,
+ and skipping the leading '-'.
+
+ We have a (pointer,size) pair that doesn't necessarily have a
+ terminator, so create a 0-terminated clone of the string. */
+ gcc_assert (sz > 0);
+ char *tmp = xstrndup (p + 1, sz - 1); // skip the leading '-'
+ size_t opt = find_opt (tmp, m_lang_mask);
+ free (tmp);
+
+ if (opt >= N_OPTS)
+ /* Option not recognized. */
+ return label_text ();
+
+ return get_option_url_suffix (opt, m_lang_mask);
+}
+
char *
gcc_urlifier::make_doc_url (const char *doc_url_suffix)
{
@@ -115,9 +179,9 @@ gcc_urlifier::make_doc_url (const char *doc_url_suffix)
} // anonymous namespace
urlifier *
-make_gcc_urlifier ()
+make_gcc_urlifier (unsigned int lang_mask)
{
- return new gcc_urlifier ();
+ return new gcc_urlifier (lang_mask);
}
#if CHECKING_P
@@ -137,22 +201,26 @@ gcc_urlifier_cc_tests ()
doc_urls[idx].quoted_text)
< 0);
- gcc_urlifier u;
+ gcc_urlifier u (0);
- ASSERT_EQ (u.get_url_suffix_for_quoted_text (""), nullptr);
- ASSERT_EQ (u.get_url_suffix_for_quoted_text (")"), nullptr);
+ ASSERT_EQ (u.get_url_suffix_for_quoted_text ("").get (), nullptr);
+ ASSERT_EQ (u.get_url_suffix_for_quoted_text (")").get (), nullptr);
- ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("#pragma message"),
+ ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("#pragma message").get (),
"gcc/Diagnostic-Pragmas.html");
// Incomplete prefix of a quoted_text
- ASSERT_EQ (u.get_url_suffix_for_quoted_text ("#pragma mess"), nullptr);
+ ASSERT_EQ (u.get_url_suffix_for_quoted_text ("#pragma mess").get (), nullptr);
/* Check that every element is findable. */
for (size_t idx = 0; idx < ARRAY_SIZE (doc_urls); idx++)
ASSERT_STREQ
- (u.get_url_suffix_for_quoted_text (doc_urls[idx].quoted_text),
+ (u.get_url_suffix_for_quoted_text (doc_urls[idx].quoted_text).get (),
doc_urls[idx].url_suffix);
+
+ /* Check an option. */
+ ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("-fpack-struct").get (),
+ "gcc/Code-Gen-Options.html#index-fpack-struct");
}
} // namespace selftest
diff --git a/gcc/gcc-urlifier.def b/gcc/gcc-urlifier.def
index 360de93..de6d9a3 100644
--- a/gcc/gcc-urlifier.def
+++ b/gcc/gcc-urlifier.def
@@ -16,5 +16,3 @@ DOC_URL ("#pragma pack", "gcc/Structure-Layout-Pragmas.html"),
DOC_URL ("#pragma redefine_extname", "gcc/Symbol-Renaming-Pragmas.html"),
DOC_URL ("#pragma scalar_storage_order", "gcc/Structure-Layout-Pragmas.html"),
DOC_URL ("#pragma weak", "gcc/Weak-Pragmas.html"),
-DOC_URL ("--version", "gcc/Overall-Options.html#index-version"),
-DOC_URL ("-fpack-struct", "gcc/Code-Gen-Options.html#index-fpack-struct"),
diff --git a/gcc/gcc-urlifier.h b/gcc/gcc-urlifier.h
index 601cea5..660d4f8 100644
--- a/gcc/gcc-urlifier.h
+++ b/gcc/gcc-urlifier.h
@@ -21,6 +21,6 @@ along with GCC; see the file COPYING3. If not see
#ifndef GCC_GCC_URLIFIER_H
#define GCC_GCC_URLIFIER_H
-extern urlifier *make_gcc_urlifier ();
+extern urlifier *make_gcc_urlifier (unsigned int lang_mask);
#endif /* GCC_GCC_URLIFIER_H */
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 76081b9..588a0e9 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -8340,7 +8340,7 @@ driver::global_initializations ()
diagnostic_initialize (global_dc, 0);
diagnostic_color_init (global_dc);
diagnostic_urls_init (global_dc);
- global_dc->set_urlifier (make_gcc_urlifier ());
+ global_dc->set_urlifier (make_gcc_urlifier (0));
#ifdef GCC_DRIVER_HOST_INITIALIZATION
/* Perform host dependent initialization when needed. */
diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog
index 4696273..9edc3fa 100644
--- a/gcc/go/ChangeLog
+++ b/gcc/go/ChangeLog
@@ -1,3 +1,7 @@
+2024-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ * gccgo.texi: Bump @copyrights-go year.
+
2023-07-05 Robin Dapp <rdapp@ventanamicro.com>
Juzhe-Zhong <juzhe.zhong@rivai.ai>
diff --git a/gcc/go/lang.opt.urls b/gcc/go/lang.opt.urls
new file mode 100644
index 0000000..34d3154
--- /dev/null
+++ b/gcc/go/lang.opt.urls
@@ -0,0 +1,17 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/go/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+; duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+; duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
diff --git a/gcc/lto/lang.opt.urls b/gcc/lto/lang.opt.urls
new file mode 100644
index 0000000..f7509c8
--- /dev/null
+++ b/gcc/lto/lang.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/lto/lang.opt and generated HTML
+
+flinker-output=
+UrlSuffix(gcc/Link-Options.html#index-flinker-output)
+
+help
+UrlSuffix(gcc/Overall-Options.html#index-help)
+
diff --git a/gcc/m2/lang.opt.urls b/gcc/m2/lang.opt.urls
new file mode 100644
index 0000000..e9028f96
--- /dev/null
+++ b/gcc/m2/lang.opt.urls
@@ -0,0 +1,118 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/m2/lang.opt and generated HTML
+
+fversion
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fversion)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+; duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+; duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-parameter)
+
+B
+UrlSuffix(gcc/Directory-Options.html#index-B) LangUrlSuffix_D(gdc/Directory-Options.html#index-B)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping UrlSuffix for 'E' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-E-1'
+; duplicate: 'gcc/Overall-Options.html#index-E'
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF) LangUrlSuffix_D(gdc/Code-Generation.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG) LangUrlSuffix_D(gdc/Code-Generation.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM) LangUrlSuffix_D(gdc/Code-Generation.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+
+Mno-modules
+UrlSuffix(gcc/Preprocessor-Options.html#index-Mno-modules)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP) LangUrlSuffix_D(gdc/Code-Generation.html#index-MP)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ) LangUrlSuffix_D(gdc/Code-Generation.html#index-MQ)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT) LangUrlSuffix_D(gdc/Code-Generation.html#index-MT)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+; skipping UrlSuffix for 'ansi' due to multiple URLs:
+; duplicate: 'gcc/C-Dialect-Options.html#index-ansi-1'
+; duplicate: 'gcc/Non-bugs.html#index-ansi-3'
+; duplicate: 'gcc/Other-Builtins.html#index-ansi-2'
+; duplicate: 'gcc/Standards.html#index-ansi'
+
+; skipping UrlSuffix for 'c' due to multiple URLs:
+; duplicate: 'gcc/Link-Options.html#index-c-1'
+; duplicate: 'gcc/Overall-Options.html#index-c'
+
+fexceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
+
+fpreprocessed
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpreprocessed)
+
+fworking-directory
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-working-directory)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix)
+
+iquote
+UrlSuffix(gcc/Directory-Options.html#index-iquote)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+idirafter
+UrlSuffix(gcc/Directory-Options.html#index-idirafter)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib) LangUrlSuffix_D(gdc/Directory-Options.html#index-imultilib)
+
+save-temps
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+save-temps=
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+traditional-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-traditional-cpp)
+
diff --git a/gcc/omp-general.cc b/gcc/omp-general.cc
index 264fbc0..bd4648f 100644
--- a/gcc/omp-general.cc
+++ b/gcc/omp-general.cc
@@ -1,5 +1,5 @@
-/* General types and functions that are uselful for processing of OpenMP,
- OpenACC and similar directivers at various stages of compilation.
+/* General types and functions that are useful for processing of OpenMP,
+ OpenACC and similar directives at various stages of compilation.
Copyright (C) 2005-2024 Free Software Foundation, Inc.
@@ -19,8 +19,6 @@ 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/>. */
-/* Find an OMP clause of type KIND within CLAUSES. */
-
#include "config.h"
#include "system.h"
#include "coretypes.h"
@@ -45,11 +43,11 @@ along with GCC; see the file COPYING3. If not see
#include "data-streamer.h"
#include "streamer-hooks.h"
#include "opts.h"
-#include "omp-general.h"
#include "tree-pretty-print.h"
enum omp_requires omp_requires_mask;
+/* Find an OMP clause of type KIND within CLAUSES. */
tree
omp_find_clause (tree clauses, enum omp_clause_code kind)
{
@@ -2874,9 +2872,8 @@ oacc_launch_pack (unsigned code, tree device, unsigned op)
return res;
}
-/* FIXME: What is the following comment for? */
-/* Look for compute grid dimension clauses and convert to an attribute
- attached to FN. This permits the target-side code to (a) massage
+/* Openacc compute grid dimension clauses are converted to an attribute
+ attached to the function. This permits the target-side code to (a) massage
the dimensions, (b) emit that data and (c) optimize. Non-constant
dimensions are pushed onto ARGS.
@@ -2890,9 +2887,8 @@ oacc_launch_pack (unsigned code, tree device, unsigned op)
dimensions, keyed by the device type. The first entry will be the
default. Well, that's the plan. */
-/* Replace any existing oacc fn attribute with updated dimensions. */
-
-/* Variant working on a list of attributes. */
+/* Replace any existing oacc fn attribute in ATTRIBS with updated
+ dimensions. */
tree
oacc_replace_fn_attrib_attr (tree attribs, tree dims)
@@ -2905,7 +2901,8 @@ oacc_replace_fn_attrib_attr (tree attribs, tree dims)
return tree_cons (ident, dims, attribs);
}
-/* Variant working on a function decl. */
+/* Replace any existing oacc fn attribute on FN with updated
+ dimensions. */
void
oacc_replace_fn_attrib (tree fn, tree dims)
diff --git a/gcc/opt-functions.awk b/gcc/opt-functions.awk
index 8f6578b..2f5616a 100644
--- a/gcc/opt-functions.awk
+++ b/gcc/opt-functions.awk
@@ -193,6 +193,21 @@ function var_name(flags)
return nth_arg(0, opt_args("Var", flags))
}
+# If FLAGS includes a UrlSuffix flag, return the value it specifies.
+# Return the empty string otherwise.
+function url_suffix(flags)
+{
+ return nth_arg(0, opt_args("UrlSuffix", flags))
+}
+
+# If FLAGS includes a LangUrlSuffix_LANG flag, return the
+# value it specifies.
+# Return the empty string otherwise.
+function lang_url_suffix(flags, lang)
+{
+ return nth_arg(0, opt_args("LangUrlSuffix_" lang, flags))
+}
+
# Return the name of the variable if FLAGS has a HOST_WIDE_INT variable.
# Return the empty string otherwise.
function host_wide_int_var_name(flags)
diff --git a/gcc/options-urls-cc-gen.awk b/gcc/options-urls-cc-gen.awk
new file mode 100644
index 0000000..e021e7c
--- /dev/null
+++ b/gcc/options-urls-cc-gen.awk
@@ -0,0 +1,105 @@
+# Copyright (C) 2023 Free Software Foundation, Inc.
+#
+# This program 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.
+#
+# This program 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 this program; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# This Awk script reads in the option records generated from
+# opt-gather.awk, and generates a C++ file containing an array
+# of URL suffixes (possibly NULL), one per option.
+
+# This program uses functions from opt-functions.awk and code from
+# opt-read.awk.
+#
+# Usage: awk -f opt-functions.awk -f opt-read.awk -f options-urls-cc-gen.awk \
+# [-v header_name=header.h] < inputfile > options-urls.cc
+
+END {
+
+
+print "/* This file is auto-generated by options-urls-cc-gen.awk. */"
+print ""
+n_headers = split(header_name, headers, " ")
+for (i = 1; i <= n_headers; i++)
+ print "#include " quote headers[i] quote
+print "#include " quote "opts.h" quote
+print "#include " quote "intl.h" quote
+print "#include " quote "insn-attr-common.h" quote
+print ""
+
+if (n_extra_c_includes > 0) {
+ for (i = 0; i < n_extra_c_includes; i++) {
+ print "#include " quote extra_c_includes[i] quote
+ }
+ print ""
+}
+
+print "const char *"
+print "get_opt_url_suffix (int option_index, unsigned lang_mask)"
+print "{"
+print " switch (option_index)"
+print " {"
+
+
+optindex = 0
+for (i = 0; i < n_opts; i++) {
+ # Combine the flags of identical switches. Switches
+ # appear many times if they are handled by many front
+ # ends, for example.
+ while( i + 1 != n_opts && opts[i] == opts[i + 1] ) {
+ flags[i + 1] = flags[i] " " flags[i + 1];
+ i++;
+ }
+
+ len = length (opts[i]);
+ enum = opt_enum(opts[i])
+
+ # Aliases do not get enumeration names.
+ if ((flag_set_p("Alias.*", flags[i]) \
+ && !flag_set_p("SeparateAlias", flags[i])) \
+ || flag_set_p("Ignore", flags[i])) {
+ show_case = 0;
+ } else {
+ show_case = 1;
+ }
+
+ if (show_case) {
+ printf(" case %s:\n", opt_enum(opts[i]))
+
+ # Handle any lang-specific LangUrlSuffix directives:
+ for (lang_idx = 0; lang_idx < n_langs; lang_idx++) {
+ lang_name = lang_sanitized_name(langs[lang_idx])
+ u = lang_url_suffix(flags[i], lang_name)
+ if (u != "") {
+ printf(" if (lang_mask & CL_%s)\n", lang_name)
+ printf(" return \"%s\";\n", u)
+ }
+ }
+
+ # Use any language-independent UrlSuffix directive:
+ u = url_suffix(flags[i])
+ if (u != "") {
+ printf(" return \"%s\";\n", u)
+ } else {
+ printf(" break;\n")
+ }
+ }
+
+ # Bump up the informational option index.
+ ++optindex
+ }
+
+print " }"
+print " return nullptr;"
+print "}"
+}
diff --git a/gcc/opts-diagnostic.h b/gcc/opts-diagnostic.h
index e8bb77e..a18c4c1 100644
--- a/gcc/opts-diagnostic.h
+++ b/gcc/opts-diagnostic.h
@@ -24,6 +24,7 @@ extern char *option_name (const diagnostic_context *context, int option_index,
diagnostic_t orig_diag_kind, diagnostic_t diag_kind);
extern char *get_option_url (const diagnostic_context *context,
- int option_index);
+ int option_index,
+ unsigned lang_mask);
#endif
diff --git a/gcc/opts.cc b/gcc/opts.cc
index da6d634..3333600 100644
--- a/gcc/opts.cc
+++ b/gcc/opts.cc
@@ -3710,14 +3710,6 @@ get_option_html_page (int option_index)
{
const cl_option *cl_opt = &cl_options[option_index];
- /* Analyzer options are on their own page. */
- if (strstr (cl_opt->opt_text, "analyzer-"))
- return "gcc/Static-Analyzer-Options.html";
-
- /* Handle -flto= option. */
- if (strstr (cl_opt->opt_text, "flto"))
- return "gcc/Optimize-Options.html";
-
#ifdef CL_Fortran
if ((cl_opt->flags & CL_Fortran) != 0
/* If it is option common to both C/C++ and Fortran, it is documented
@@ -3730,32 +3722,49 @@ get_option_html_page (int option_index)
return "gfortran/Error-and-Warning-Options.html";
#endif
- return "gcc/Warning-Options.html";
+ return nullptr;
+}
+
+/* Get the url within the documentation for this option, or NULL. */
+
+label_text
+get_option_url_suffix (int option_index, unsigned lang_mask)
+{
+ if (const char *url = get_opt_url_suffix (option_index, lang_mask))
+
+ return label_text::borrow (url);
+
+ /* Fallback code for some options that aren't handled byt opt_url_suffixes
+ e.g. links below "gfortran/". */
+ if (const char *html_page = get_option_html_page (option_index))
+ return label_text::take
+ (concat (html_page,
+ /* Expect an anchor of the form "index-Wfoo" e.g.
+ <a name="index-Wformat"></a>, and thus an id within
+ the page of "#index-Wformat". */
+ "#index",
+ cl_options[option_index].opt_text,
+ NULL));
+
+ return label_text ();
}
/* Return malloced memory for a URL describing the option OPTION_INDEX
which enabled a diagnostic (context CONTEXT). */
char *
-get_option_url (const diagnostic_context *, int option_index)
+get_option_url (const diagnostic_context *,
+ int option_index,
+ unsigned lang_mask)
{
if (option_index)
- return concat (/* DOCUMENTATION_ROOT_URL should be supplied via
- #include "config.h" (see --with-documentation-root-url),
- and should have a trailing slash. */
- DOCUMENTATION_ROOT_URL,
-
- /* get_option_html_page will return something like
- "gcc/Warning-Options.html". */
- get_option_html_page (option_index),
-
- /* Expect an anchor of the form "index-Wfoo" e.g.
- <a name="index-Wformat"></a>, and thus an id within
- the URL of "#index-Wformat". */
- "#index", cl_options[option_index].opt_text,
- NULL);
- else
- return NULL;
+ {
+ label_text url_suffix = get_option_url_suffix (option_index, lang_mask);
+ if (url_suffix.get ())
+ return concat (DOCUMENTATION_ROOT_URL, url_suffix.get (), nullptr);
+ }
+
+ return nullptr;
}
/* Return a heap allocated producer with command line options. */
@@ -3886,17 +3895,35 @@ gen_producer_string (const char *language_string, cl_decoded_option *options,
namespace selftest {
-/* Verify that get_option_html_page works as expected. */
+/* Verify that get_option_url_suffix works as expected. */
static void
-test_get_option_html_page ()
+test_get_option_url_suffix ()
{
- ASSERT_STREQ (get_option_html_page (OPT_Wcpp), "gcc/Warning-Options.html");
- ASSERT_STREQ (get_option_html_page (OPT_Wanalyzer_double_free),
- "gcc/Static-Analyzer-Options.html");
+ ASSERT_STREQ (get_option_url_suffix (OPT_Wcpp, 0).get (),
+ "gcc/Warning-Options.html#index-Wcpp");
+ ASSERT_STREQ (get_option_url_suffix (OPT_Wanalyzer_double_free, 0).get (),
+ "gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-free");
+
+ /* Test of a D-specific option. */
+#ifdef CL_D
+ ASSERT_EQ (get_option_url_suffix (OPT_fbounds_check_, 0).get (), nullptr);
+ ASSERT_STREQ (get_option_url_suffix (OPT_fbounds_check_, CL_D).get (),
+ "gdc/Runtime-Options.html#index-fbounds-check");
+
+ /* Test of a D-specific override to an option URL. */
+ /* Generic URL. */
+ ASSERT_STREQ (get_option_url_suffix (OPT_fmax_errors_, 0).get (),
+ "gcc/Warning-Options.html#index-fmax-errors");
+ /* D-specific URL. */
+ ASSERT_STREQ (get_option_url_suffix (OPT_fmax_errors_, CL_D).get (),
+ "gdc/Warnings.html#index-fmax-errors");
+#endif
+
#ifdef CL_Fortran
- ASSERT_STREQ (get_option_html_page (OPT_Wline_truncation),
- "gfortran/Error-and-Warning-Options.html");
+ ASSERT_STREQ
+ (get_option_url_suffix (OPT_Wline_truncation, CL_Fortran).get (),
+ "gfortran/Error-and-Warning-Options.html#index-Wline-truncation");
#endif
}
@@ -3959,7 +3986,7 @@ test_enum_sets ()
void
opts_cc_tests ()
{
- test_get_option_html_page ();
+ test_get_option_url_suffix ();
test_enum_sets ();
}
diff --git a/gcc/opts.h b/gcc/opts.h
index 866a137..64f94f6 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see
#ifndef GCC_OPTS_H
#define GCC_OPTS_H
+#include "rich-location.h"
#include "obstack.h"
/* Specifies how a switch's VAR_VALUE relates to its FLAG_VAR. */
@@ -152,6 +153,10 @@ struct cl_option_state {
extern const struct cl_option cl_options[];
extern const unsigned int cl_options_count;
+
+extern const char *
+get_opt_url_suffix (int option_index, unsigned lang_mask);
+
#ifdef ENABLE_PLUGIN
extern const struct cl_var cl_vars[];
#endif
@@ -565,4 +570,7 @@ struct switchstr
bool ordering;
};
+extern label_text
+get_option_url_suffix (int option_index, unsigned lang_mask);
+
#endif
diff --git a/gcc/params.opt.urls b/gcc/params.opt.urls
new file mode 100644
index 0000000..e76310c
--- /dev/null
+++ b/gcc/params.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/params.opt and generated HTML
+
diff --git a/gcc/regenerate-opt-urls.py b/gcc/regenerate-opt-urls.py
new file mode 100755
index 0000000..edce265
--- /dev/null
+++ b/gcc/regenerate-opt-urls.py
@@ -0,0 +1,397 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2023 Free Software Foundation, Inc.
+#
+# Script to regenerate FOO.opt.urls files for each FOO.opt in the
+# source tree.
+#
+# 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/>. */
+
+DESCRIPTION = """
+Parses the generated HTML (from "make html") to locate anchors
+for options, then parses the .opt files within the source tree,
+and generates a .opt.urls in the source tree for each .opt file,
+giving URLs for each option, where it can.
+
+Usage (from build/gcc subdirectory):
+ ../../src/gcc/regenerate-opt-urls.py HTML/gcc-14.0.0/ ../../src
+
+To run unit tests:
+ ../../src/gcc/regenerate-opt-urls.py HTML/gcc-14.0.0/ ../../src --unit-test
+"""
+
+import argparse
+import json
+import os
+from pathlib import Path
+from pprint import pprint
+import sys
+import re
+import unittest
+
+def canonicalize_option_name(option_name):
+ if option_name.endswith('='):
+ option_name = option_name[0:-1]
+ return option_name
+
+
+def canonicalize_url_suffix(url_suffix):
+ """
+ Various options have anchors for both the positive and
+ negative form. For example -Wcpp has both:
+ 'gcc/Warning-Options.html#index-Wno-cpp'
+ 'gcc/Warning-Options.html#index-Wcpp'
+
+ Return a canonicalized version of the url_suffix that
+ strips out any "no-" prefixes, for use in deduplication.
+ Note that the resulting url suffix might not correspond to
+ an actual anchor in the HTML.
+ """
+ url_suffix = re.sub('index-Wno-', 'index-W', url_suffix)
+ url_suffix = re.sub('index-fno-', 'index-f', url_suffix)
+ url_suffix = re.sub('_003d$', '', url_suffix)
+ url_suffix = re.sub('-([0-9]+)$', '', url_suffix)
+ return url_suffix
+
+
+class Index:
+ def __init__(self):
+ # Map from language (or None) to map from option name to set of URL suffixes
+ self.entries = {}
+
+ def add_entry(self, matched_text, url_suffix, language, verbose=False):
+ if 'Attributes.html' in url_suffix:
+ return
+ matched_text = canonicalize_option_name(matched_text)
+ if language not in self.entries:
+ self.entries[language] = {}
+ per_lang_entries = self.entries[language]
+ if matched_text in per_lang_entries:
+ # Partition by canonicalized url_suffixes; add the
+ # first url_suffix in each such partition.
+ c_new = canonicalize_url_suffix(url_suffix)
+ for entry in per_lang_entries[matched_text]:
+ c_entry = canonicalize_url_suffix(entry)
+ if c_new == c_entry:
+ return
+ per_lang_entries[matched_text].add(url_suffix)
+ else:
+ per_lang_entries[matched_text] = set([url_suffix])
+
+ def get_languages(self):
+ return self.entries.keys()
+
+ def get_url_suffixes(self, text, language=None):
+ text = canonicalize_option_name(text)
+ per_lang_entries = self.entries.get(language)
+ if per_lang_entries:
+ return per_lang_entries.get(text)
+
+ def parse_option_index(self, input_filename, language, verbose=False):
+ with open(input_filename) as f:
+ dirname = input_filename.parent.name
+ for line in f:
+ self.parse_html_line_option_index(dirname, line, language, verbose)
+
+ def parse_html_line_option_index(self, dirname, line, language, verbose=False):
+ if verbose:
+ print(repr(line))
+
+ # Update for this in the GCC website's bin/preprocess process_html_file:
+ # | sed -e 's/_002d/-/g' -e 's/_002a/*/g' \
+ line = line.replace('_002d', '-')
+ line = line.replace('_002a', '*')
+
+ # e.g. <a href="Optimize-Options.html#index-fmodulo_002dsched"><code>fmodulo-sched</code></a>
+ m = re.search(r'<a href="([\S]+)"><code>([\S]+)</code></a>', line)
+ if not m:
+ return
+ if verbose:
+ print(m.groups())
+ url_suffix, index_text = m.groups()
+ option = '-' + index_text
+
+ # Strip off "no-" prefixes from options
+ if option[:5] == '-Wno-':
+ option = '-W' + option[5:]
+ if option[:5] == '-fno-':
+ option = '-f' + option[5:]
+
+ url_suffix = dirname + '/' + url_suffix
+ self.add_entry(option, url_suffix, language, verbose)
+
+
+class TestParsingIndex(unittest.TestCase):
+ def test_parse_line(self):
+ index = Index()
+ index.parse_html_line_option_index('gcc',
+ '<a href="Optimize-Options.html#index-fmodulo_002dsched"><code>fmodulo-sched</code></a>',
+ None)
+ self.assertEqual(index.get_url_suffixes('-fmodulo-sched'),
+ {'gcc/Optimize-Options.html#index-fmodulo-sched'})
+
+ def test_negated_flag(self):
+ index = Index()
+ index.parse_html_line_option_index('gcc',
+ '<tr><td></td><td valign="top"><a href="Static-Analyzer-Options.html#index-fno_002danalyzer"><code>fno-analyzer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Static-Analyzer-Options.html">Static Analyzer Options</a></td></tr>\n',
+ None)
+ self.assertEqual(index.get_url_suffixes('-fno-analyzer'), None)
+ self.assertEqual(index.get_url_suffixes('-fanalyzer'),
+ {'gcc/Static-Analyzer-Options.html#index-fno-analyzer'})
+
+ def test_negated_warning(self):
+ index = Index()
+ index.parse_html_line_option_index('gcc',
+ '<tr><td></td><td valign="top"><a href="Warning-Options.html#index-Wno_002dalloca"><code>Wno-alloca</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Warning-Options.html">Warning Options</a></td></tr>\n',
+ None)
+ self.assertEqual(index.get_url_suffixes('-Wno-alloca'),
+ None)
+ self.assertEqual(index.get_url_suffixes('-Walloca'),
+ {'gcc/Warning-Options.html#index-Wno-alloca'})
+
+ def test_parse_option_index(self):
+ index = Index()
+ index.parse_option_index(INPUT_HTML_PATH / 'gcc/Option-Index.html',
+ language=None)
+ self.assertEqual(index.get_url_suffixes('-fmodulo-sched'),
+ {'gcc/Optimize-Options.html#index-fmodulo-sched'})
+ self.assertEqual(index.get_url_suffixes('-O'),
+ {'gcc/Optimize-Options.html#index-O'})
+ self.assertEqual(index.get_url_suffixes('-O0'),
+ {'gcc/Optimize-Options.html#index-O0'})
+ self.assertEqual(index.get_url_suffixes('-Wframe-larger-than='),
+ {'gcc/Warning-Options.html#index-Wframe-larger-than_003d'})
+
+ # Check an option with duplicates: '-march'
+ # The url_suffixes will be of the form
+ # 'gcc/HPPA-Options.html#index-march-5',
+ # 'gcc/LoongArch-Options.html#index-march-7',
+ # etc, where the trailing number is, unfortunately, likely to
+ # change from release to release.
+ # Replace them with 'NN' for the purpose of this test:
+ em_arch_url_suffixes = [re.sub('(-[0-9]+)', '-NN', s)
+ for s in index.get_url_suffixes('-march')]
+ self.assertIn('gcc/ARM-Options.html#index-march-NN', em_arch_url_suffixes)
+ self.assertIn('gcc/x86-Options.html#index-march-NN', em_arch_url_suffixes)
+
+ self.assertEqual(index.get_url_suffixes('-Wcpp'),
+ {'gcc/Warning-Options.html#index-Wcpp'})
+
+ self.assertNotEqual(index.get_url_suffixes('-march'), None)
+ self.assertNotEqual(index.get_url_suffixes('-march='), None)
+
+class OptFile:
+ def __init__(self, opt_path, rel_path):
+ """
+ Parse a .opt file. Similar to opt-gather.awk.
+ """
+ self.rel_path = rel_path
+ assert rel_path.startswith('gcc')
+ self.records = []
+ with open(opt_path) as f:
+ flag = 0
+ for line in f:
+ if re.match(r'[ \t]*(;|$)', line):
+ flag = 0
+ else:
+ if flag == 0:
+ self.records.append([line])
+ flag = 1
+ else:
+ self.records[-1].append(line)
+
+# Mapping from target-specific page to subdirectory containing .opt files
+# documented on that page.
+
+TARGET_SPECIFIC_PAGES = {
+ 'gcc/AArch64-Options.html' : 'gcc/config/aarch64/',
+ 'gcc/AMD-GCN-Options.html' : 'gcc/config/gcn/',
+ 'gcc/ARC-Options.html' : 'gcc/config/arc/',
+ 'gcc/ARC-Options.html' : 'gcc/config/arc/',
+ 'gcc/ARM-Options.html' : 'gcc/config/arm/',
+ 'gcc/AVR-Options.html' : 'gcc/config/avr/',
+ 'gcc/Adapteva-Epiphany-Options.html' : 'gcc/config/epiphany/',
+ 'gcc/Blackfin-Options.html' : 'gcc/config/bfin/',
+ 'gcc/C-SKY-Options.html' : 'gcc/config/csky/',
+ 'gcc/C6X-Options.html' : 'gcc/config/c6x/',
+ 'gcc/CRIS-Options.html' : 'gcc/config/cris/',
+ 'gcc/DEC-Alpha-Options.html' : 'gcc/config/alpha/',
+ 'gcc/FR30-Options.html' : 'gcc/config/fr30/',
+ 'gcc/FRV-Options.html' : 'gcc/config/frv/',
+ 'gcc/FT32-Options.html' : 'gcc/config/ft32/',
+ 'gcc/H8_002f300-Options.html' : 'gcc/config/h8300/',
+ 'gcc/HPPA-Options.html' : 'gcc/config/pa/',
+ 'gcc/IA-64-Options.html' : 'gcc/config/ia64/',
+ 'gcc/LoongArch-Options.html' : 'gcc/config/loongarch/',
+ 'gcc/M32C-Options.html' : 'gcc/config/m32c/',
+ 'gcc/M32R_002fD-Options.html' : 'gcc/config/m32r/',
+ 'gcc/M680x0-Options.html' : 'gcc/config/m68k/',
+ 'gcc/MCore-Options.html' : 'gcc/config/mcore/',
+ 'gcc/MIPS-Options.html' : 'gcc/config/mips/',
+ 'gcc/MMIX-Options.html' : 'gcc/config/mmix/',
+ 'gcc/MN10300-Options.html' : 'gcc/config/mn10300/',
+ 'gcc/MSP430-Options.html' : 'gcc/config/msp430/',
+ 'gcc/MicroBlaze-Options.html' : 'gcc/config/microblaze/',
+ 'gcc/Moxie-Options.html' : 'gcc/config/moxie/',
+ 'gcc/NDS32-Options.html' : 'gcc/config/nds32/',
+ 'gcc/Nios-II-Options.html' : 'gcc/config/nios2/',
+ 'gcc/Nvidia-PTX-Options.html' : 'gcc/config/nvptx/',
+ 'gcc/OpenRISC-Options.html' : 'gcc/config/or1k/',
+ 'gcc/PDP-11-Options.html' : 'gcc/config/pdp11',
+ 'gcc/PRU-Options.html' : 'gcc/config/pru/',
+ 'gcc/RISC-V-Options.html' : 'gcc/config/riscv/',
+ 'gcc/RL78-Options.html' : 'gcc/config/rl78/',
+ 'gcc/RS_002f6000-and-PowerPC-Options.html' : 'gcc/config/rs6000/',
+ 'gcc/RX-Options.html' : 'gcc/config/rx/',
+ 'gcc/SH-Options.html' : 'gcc/config/sh/',
+ 'gcc/SPARC-Options.html' : 'gcc/config/sparc/',
+ 'gcc/S_002f390-and-zSeries-Options.html' : 'gcc/config/s390',
+ 'gcc/V850-Options.html' : 'gcc/config/vax/',
+ 'gcc/VAX-Options.html' : 'gcc/config/v850/',
+ 'gcc/Visium-Options.html' : 'gcc/config/visium/',
+ 'gcc/Xstormy16-Options.html' : 'gcc/config/stormy16/',
+ 'gcc/Xtensa-Options.html' : 'gcc/config/xtensa/',
+ 'gcc/eBPF-Options.html' : 'gcc/config/bpf/',
+ 'gcc/x86-Options.html' : 'gcc/config/i386/',
+}
+
+def target_specific(url_suffix):
+ for page_prefix, subdir in TARGET_SPECIFIC_PAGES.items():
+ if url_suffix.startswith(page_prefix):
+ return subdir
+
+def filter_urlsuffixes_for_optfile(optfile, url_suffixes):
+ """
+ Filter out target-specific options for the wrong target.
+ """
+ result = set()
+ for url_suffix in url_suffixes:
+ subdir = target_specific(url_suffix)
+ if subdir:
+ if not optfile.rel_path.startswith(subdir):
+ # Skip this
+ continue
+ result.add(url_suffix)
+ return result
+
+
+class TestFiltering(unittest.TestCase):
+ def test_target_specific(self):
+ self.assertEqual(target_specific('gcc/Preprocessor-Options.html#index-A'),
+ None)
+ self.assertEqual(target_specific('gcc/MMIX-Options.html#index-mknuthdiv'),
+ 'gcc/config/mmix/')
+
+ def test_filter(self):
+ s = {'gcc/MIPS-Options.html#index-munaligned-access-1',
+ 'gcc/ARM-Options.html#index-munaligned-access'}
+ arm_optfile = OptFile('/dev/null', 'gcc/config/arm/arm.opt')
+ mips_optfile = OptFile('/dev/null', 'gcc/config/mips/mips.opt')
+ self.assertEqual(
+ filter_urlsuffixes_for_optfile(arm_optfile, s),
+ {'gcc/ARM-Options.html#index-munaligned-access'})
+ self.assertEqual(
+ filter_urlsuffixes_for_optfile(mips_optfile, s),
+ {'gcc/MIPS-Options.html#index-munaligned-access-1'})
+
+
+def write_url_file(index, optfile, dstfile):
+ dstfile.write('; Autogenerated by regenerate-opt-urls.py from %s'
+ ' and generated HTML\n\n'
+ % optfile.rel_path)
+ for record in optfile.records:
+ opt = '-' + record[0].strip()
+ url_suffixes_per_lang = {}
+ count = 0
+ for lang in index.get_languages():
+ this_lang_suffixes = index.get_url_suffixes(opt, language=lang)
+ url_suffixes_per_lang[lang] = this_lang_suffixes
+ if this_lang_suffixes:
+ count += len(this_lang_suffixes)
+ if not count:
+ continue
+ directives = []
+ for lang in index.get_languages():
+ if lang:
+ directive = 'LangUrlSuffix_%s for %r' % (lang, opt[1:])
+ else:
+ directive = 'UrlSuffix for %r' % opt[1:]
+ url_suffixes = url_suffixes_per_lang[lang]
+ if url_suffixes:
+ url_suffixes = filter_urlsuffixes_for_optfile(optfile, url_suffixes)
+ if url_suffixes:
+ if len(url_suffixes) == 1:
+ if lang:
+ directives.append('LangUrlSuffix_%s(%s)' % (lang, list(url_suffixes)[0]))
+ else:
+ directives.append('UrlSuffix(%s)' % list(url_suffixes)[0])
+ else:
+ dstfile.write('; skipping %s due to multiple URLs:\n'
+ % directive)
+ for u in sorted(url_suffixes):
+ dstfile.write('; duplicate: %r\n' % u)
+ else:
+ dstfile.write('; skipping %s due to finding no URLs\n'
+ % directive)
+ if directives:
+ dstfile.write('%s\n' % opt[1:])
+ dstfile.write(' '.join(directives) + '\n')
+ dstfile.write('\n')
+
+# A list of (REL_PATH, LANG) pairs, where
+# - REL_PATH is the relative path to a generated Option-Index.html file
+# for a specific frontend, and
+# - LANG is the name of the language (as specified in the "Language" record
+# within the lang.opt file), or None for the language-independent
+# documentation.
+
+PER_LANGUAGE_OPTION_INDEXES = [
+ ('gcc/Option-Index.html', None),
+ ('gdc/Option-Index.html', 'D'),
+ ('gfortran/Option-Index.html', 'Fortran')
+]
+
+def main(args):
+ index = Index()
+ for option_index_rel_path, lang in PER_LANGUAGE_OPTION_INDEXES:
+ index.parse_option_index(args.base_html_dir / option_index_rel_path,
+ language=lang)
+ for root, dirs, files in os.walk(args.src_gcc_dir):
+ for f in files:
+ if f.endswith('.opt'):
+ opt_path = os.path.join(root, f)
+ rel_path = os.path.relpath(opt_path, args.src_gcc_dir)
+ optfile = OptFile(opt_path, rel_path)
+ dstname = f + '.urls'
+ urlfile = os.path.join(root, dstname)
+ with open(urlfile, 'w') as dstfile:
+ write_url_file(index, optfile, dstfile)
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description=DESCRIPTION,
+ formatter_class=argparse.RawDescriptionHelpFormatter)
+ parser.add_argument('base_html_dir', type=Path)
+ parser.add_argument('src_gcc_dir', type=Path)
+ parser.add_argument('--unit-test', action='store_true')
+ args = parser.parse_args()
+
+ if args.unit_test:
+ INPUT_HTML_PATH = args.base_html_dir
+ unittest.main(argv=[sys.argv[0], '-v'])
+ else:
+ main(args)
diff --git a/gcc/rust/lang.opt.urls b/gcc/rust/lang.opt.urls
new file mode 100644
index 0000000..9cf8987
--- /dev/null
+++ b/gcc/rust/lang.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/rust/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+; duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+; duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-const-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-const-variable=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-result
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-result)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 47b1e67..da5593a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,18 @@
+2024-01-03 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/113064
+ * g++.dg/cpp0x/rv-conv4.C: New test.
+ * g++.dg/cpp0x/rv-conv5.C: New test.
+
+2024-01-03 Xi Ruoyao <xry111@xry111.site>
+
+ * gcc.target/loongarch/vfmax-vfmin.c: New test.
+
+2024-01-03 Juzhe-Zhong <juzhe.zhong@rivai.ai>
+
+ PR target/113112
+ * gcc.dg/vect/costmodel/riscv/rvv/pr113112-5.c: New test.
+
2024-01-02 Szabolcs Nagy <szabolcs.nagy@arm.com>
* gfortran.dg/vect/vect-8.f90: Accept more vectorized loops.
diff --git a/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr112790.c b/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr112790.c
new file mode 100644
index 0000000..8f74468
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr112790.c
@@ -0,0 +1,27 @@
+/* Reproducer for false positive from -Wanalyzer-deref-before-check
+ seen on Linux kernel's block/bdev.c due to -fanalyzer mishandling
+ inlined functions. */
+
+/* { dg-additional-options "-O2 -g -fno-delete-null-pointer-checks" } */
+
+typedef unsigned char u8;
+struct inode {
+ void *i_mapping;
+ u8 i_blkbits;
+};
+struct block_device {
+ struct inode *bd_inode;
+};
+int sync_blockdev(struct block_device *bdev);
+int set_blocksize(struct block_device *bdev, u8 size) {
+ if (bdev->bd_inode->i_blkbits != size) { /* { dg-bogus "pointer 'bdev' is dereferenced here" } */
+ sync_blockdev(bdev);
+ }
+ return 0;
+}
+extern int filemap_write_and_wait(void *);
+int sync_blockdev(struct block_device *bdev) {
+ if (!bdev) /* { dg-bogus "check of 'bdev' for NULL after already dereferencing it" } */
+ return 0;
+ return filemap_write_and_wait(bdev->bd_inode->i_mapping);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-conv4.C b/gcc/testsuite/g++.dg/cpp0x/rv-conv4.C
new file mode 100644
index 0000000..7ecd2dc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-conv4.C
@@ -0,0 +1,16 @@
+// PR c++/113064
+// { dg-do compile { target c++11 } }
+
+struct B { };
+
+struct A {
+ operator B() &;
+ operator B&&() &&;
+};
+
+void f(B&&);
+
+int main() {
+ A a;
+ f(a);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-conv5.C b/gcc/testsuite/g++.dg/cpp0x/rv-conv5.C
new file mode 100644
index 0000000..dcb6fc6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-conv5.C
@@ -0,0 +1,23 @@
+// PR c++/113064
+// { dg-do compile { target c++11 } }
+
+struct no_copy {
+ no_copy() = default;
+
+ no_copy(const no_copy&) = delete;
+ no_copy(no_copy&&);
+
+ no_copy& operator=(const no_copy&) = delete;
+ no_copy& operator=(no_copy&&);
+};
+
+struct A {
+ operator no_copy() &;
+ operator no_copy&&() && = delete;
+};
+
+int main() {
+ no_copy nc;
+ A a;
+ nc = a;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/mipscop-1.c b/gcc/testsuite/gcc.c-torture/compile/mipscop-1.c
index 8a40ba1..2ba0ee7 100644
--- a/gcc/testsuite/gcc.c-torture/compile/mipscop-1.c
+++ b/gcc/testsuite/gcc.c-torture/compile/mipscop-1.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target mips*-*-* } } */
+#include <stdio.h>
register unsigned int cp0count asm ("$c0r1");
int __attribute__ ((nomips16))
diff --git a/gcc/testsuite/gcc.c-torture/compile/mipscop-2.c b/gcc/testsuite/gcc.c-torture/compile/mipscop-2.c
index 94df41d..6fffc8e 100644
--- a/gcc/testsuite/gcc.c-torture/compile/mipscop-2.c
+++ b/gcc/testsuite/gcc.c-torture/compile/mipscop-2.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target mips*-*-* } } */
+#include <stdio.h>
register unsigned int c3r1 asm ("$c3r1");
extern unsigned int b, c;
diff --git a/gcc/testsuite/gcc.c-torture/compile/mipscop-3.c b/gcc/testsuite/gcc.c-torture/compile/mipscop-3.c
index cb4bd4d..03e3011 100644
--- a/gcc/testsuite/gcc.c-torture/compile/mipscop-3.c
+++ b/gcc/testsuite/gcc.c-torture/compile/mipscop-3.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target mips*-*-* } } */
+#include <stdio.h>
register unsigned int c3r1 asm ("$c3r1"), c3r2 asm ("$c3r2");
extern unsigned int b, c;
diff --git a/gcc/testsuite/gcc.c-torture/compile/mipscop-4.c b/gcc/testsuite/gcc.c-torture/compile/mipscop-4.c
index 263fc5c..7e000c1 100644
--- a/gcc/testsuite/gcc.c-torture/compile/mipscop-4.c
+++ b/gcc/testsuite/gcc.c-torture/compile/mipscop-4.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target mips*-*-* } } */
+#include <stdio.h>
register unsigned long c3r1 asm ("$c3r1"), c3r2 asm ("$c3r2");
extern unsigned long b, c;
diff --git a/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-pr113222.c b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-pr113222.c
new file mode 100644
index 0000000..4446766
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-pr113222.c
@@ -0,0 +1,26 @@
+/* Verify that we don't ICE when generating an out-of-bounds diagram
+ when the size of an array is unknown. */
+
+/* { dg-do compile } */
+/* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
+
+#include <stdint.h>
+
+struct sched_class
+{
+ int64_t f;
+};
+extern struct sched_class __end_sched_classes[];
+
+int
+test ()
+{
+ const struct sched_class* class = ((__end_sched_classes - 1));
+ return class->f; /* { dg-warning "buffer under-read" } */
+}
+
+/* We don't care about the content of the diagram, just that we don't
+ ICE creating it. */
+
+/* { dg-allow-blank-lines-in-output 1 } */
+/* { dg-prune-output ".*" } */
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c
new file mode 100644
index 0000000..48b2427
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */
+
+void
+foo (int *__restrict a, int *__restrict b, int *__restrict c, int *__restrict d,
+ int *__restrict e, int *__restrict f, int n)
+{
+ for (int i = 0; i < n; i++)
+ a[i] = b[i] != f[i] ? c[i] * d[i] : e[i];
+}
+
+/* { dg-final { scan-assembler {e32,m4} } } */
+/* { dg-final { scan-assembler-not {jr} } } */
+/* { dg-final { scan-assembler-times {ret} 1 } } */
+/* { dg-final { scan-tree-dump-times "Preferring smaller LMUL loop because it has unexpected spills" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Maximum lmul = 16" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/slp-26.c b/gcc/testsuite/gcc.dg/vect/slp-26.c
index c964635..cfb763b 100644
--- a/gcc/testsuite/gcc.dg/vect/slp-26.c
+++ b/gcc/testsuite/gcc.dg/vect/slp-26.c
@@ -47,7 +47,7 @@ int main (void)
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { mips_msa || { amdgcn-*-* || riscv_v } } } } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { mips_msa || { amdgcn-*-* || riscv_v } } } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { mips_msa || { amdgcn-*-* || riscv_v } } } } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { mips_msa || { amdgcn-*-* || riscv_v } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { mips_msa || { amdgcn-*-* || { riscv_v || loongarch_sx } } } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { mips_msa || { amdgcn-*-* || { riscv_v || loongarch_sx } } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { mips_msa || { amdgcn-*-* || { riscv_v || loongarch_sx } } } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { mips_msa || { amdgcn-*-* || { riscv_v || loongarch_sx } } } } } } */
diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvstelm.c b/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvstelm.c
index 1a7b0e8..4b84620 100644
--- a/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvstelm.c
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvstelm.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O3 -mlasx" } */
+/* { dg-options "-O3 -mlasx -fno-vect-cost-model" } */
/* { dg-final { scan-assembler-times "xvstelm.w" 8} } */
#define LEN 256
diff --git a/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c b/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c
index 3cf2d4f..8643095 100644
--- a/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c
+++ b/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-mips16 -mcode-readable=yes -fno-tree-vrp -fno-tree-dominator-opts" } */
-/* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */
+/* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" "-O0" "-Os" } { "" } } */
/* This testcase generates multiple constant pools within a function body. */
diff --git a/gcc/testsuite/gcc.target/mips/pr104914.c b/gcc/testsuite/gcc.target/mips/pr104914.c
new file mode 100644
index 0000000..5dd10e8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/pr104914.c
@@ -0,0 +1,25 @@
+/* { dg-do run } */
+/* { dg-options "-mabi=64" } */
+
+extern void abort (void);
+extern void exit (int);
+
+NOMIPS16 int test (const unsigned char *buf)
+{
+ int val;
+ ((unsigned char*)&val)[0] = *buf++;
+ ((unsigned char*)&val)[1] = *buf++;
+ ((unsigned char*)&val)[2] = *buf++;
+ ((unsigned char*)&val)[3] = *buf++;
+ if(val > 0)
+ return 1;
+ else
+ return 0;
+}
+
+int main ()
+{
+ if (test("\xff\xff\xff\xff") != 0)
+ abort();
+ exit(0);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/_Float16-nanboxing.c b/gcc/testsuite/gcc.target/riscv/_Float16-nanboxing.c
new file mode 100644
index 0000000..c99c069
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/_Float16-nanboxing.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64ifd -mabi=lp64d -O" } */
+
+_Float16 gvar = 9.87654;
+
+union U {
+ unsigned short i16;
+ _Float16 f16;
+};
+
+_Float16 test1(unsigned short input)
+{
+ union U tmp;
+ tmp.i16 = input;
+
+ return tmp.f16;
+}
+
+_Float16 test2()
+{
+ return 1.234f;
+}
+
+_Float16 test3()
+{
+ return gvar;
+}
+
+_Float16 test()
+{
+ return 0.0f;
+}
+
+/* { dg-final { scan-assembler-times "li\[ \t\]" 4 } } */
+/* { dg-final { scan-assembler-times "fmv\.w\.x\[ \t\]" 4 } } */
+
diff --git a/gcc/testsuite/gcc.target/riscv/interrupt-misaligned.c b/gcc/testsuite/gcc.target/riscv/interrupt-misaligned.c
new file mode 100644
index 0000000..b5f8e6c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/interrupt-misaligned.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv64gc -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-skip-if "" { *-*-* } { "-flto -fno-fat-lto-objects" } } */
+
+/* Make sure no stack offset are misaligned.
+** interrupt:
+** ...
+** sd\tt0,40\(sp\)
+** frcsr\tt0
+** sw\tt0,32\(sp\)
+** sd\tt1,24\(sp\)
+** fsd\tft0,8\(sp\)
+** ...
+** lw\tt0,32\(sp\)
+** fscsr\tt0
+** ld\tt0,40\(sp\)
+** ld\tt1,24\(sp\)
+** fld\tft0,8\(sp\)
+** ...
+*/
+
+
+void interrupt(void) __attribute__((interrupt));
+void interrupt(void)
+{
+ asm volatile ("# clobber!":::"t0", "t1", "ft0");
+}
+
+/* { dg-final { check-function-bodies "**" "" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c
new file mode 100644
index 0000000..ef92c6f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+
+signed char e;
+short f = 8;
+signed d;
+int(g)(int o, int r) { return o & (o ^ -1) < 0 ? o : o - r; }
+#pragma pack(1)
+struct {
+ short h;
+ unsigned : 18;
+ short i;
+ long j;
+ int k;
+ char l;
+ long m;
+ int n;
+} a, b, s, c, *p = &b, *u = &s, q = {1};
+void t() {
+ *p = a;
+ for (; e > -7; e = g(e, 8))
+ ;
+ q = *u = c;
+ for (; d - 3; d = 3)
+ ;
+}
+
+/* { dg-final { scan-assembler-times {li\s+[a-x0-9]+,\s*32} 2 } } */
+/* { dg-final { scan-assembler-times {vsetvli} 2 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-2.c
new file mode 100644
index 0000000..cfce889
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-2.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -frename-registers" } */
+
+signed char e;
+short f = 8;
+signed d;
+int(g)(int o, int r) { return o & (o ^ -1) < 0 ? o : o - r; }
+#pragma pack(1)
+struct {
+ short h;
+ unsigned : 18;
+ short i;
+ long j;
+ int k;
+ char l;
+ long m;
+ int n;
+} a, b, s, c, *p = &b, *u = &s, q = {1};
+void t() {
+ *p = a;
+ for (; e > -7; e = g(e, 8))
+ ;
+ q = *u = c;
+ for (; d - 3; d = 3)
+ ;
+}
+
+/* { dg-final { scan-assembler-times {li\s+[a-x0-9]+,\s*32} 1 } } */
+/* { dg-final { scan-assembler-times {vsetvli} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113209.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113209.c
new file mode 100644
index 0000000..081ee36
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113209.c
@@ -0,0 +1,34 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -O3" } */
+
+int b, c, d, f, i, a;
+int e[1] = {0};
+int *g = e;
+int *k = e;
+int *z;
+long h;
+int j[5] = {0,0,0,0,0};
+void n() {
+ if (c) {
+ int **l = &z;
+ *l = e;
+ while (d)
+ ;
+ }
+}
+void o() {
+ for (; b < 5; b += a) {
+ n();
+ for (h = 0; h < 5; h++)
+ j[h] = 1;
+ int m = *e != *g;
+ a |= i <= m;
+ f = -12;
+ for (; f; f++)
+ if (*k)
+ break;
+ }
+}
+
+/* { dg-final { scan-assembler-times {vsetvli} 1 } } */
+/* { dg-final { scan-assembler-times {vsetivli} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-23.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-23.c
index 6f8e714..eacebe3 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-23.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-23.c
@@ -29,7 +29,6 @@ void f (int8_t * restrict in, int8_t * restrict out, int n, int m, int cond)
/* { dg-final { scan-assembler {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*t[au],\s*m[au]} { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
/* { dg-final { scan-assembler {vsetvli\s+zero,\s*[a-x0-9]+,\s*e32,\s*mf2,\s*tu,\s*mu} { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli} 4 { target { { any-opts "-O1" } && { no-opts "-g" "-funroll-loops" } } } } } */
/* { dg-final { scan-assembler-times {vsetvli} 3 { target { { any-opts "-Os" "-O2" } && { no-opts "-g" "-funroll-loops" } } } } } */
/* { dg-final { scan-assembler-times {li\s+[a-x0-9]+,101} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
/* { dg-final { scan-assembler-times {li\s+[a-x0-9]+,102} 1 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-1.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-1.c
index 1dae707..25fc05c 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-1.c
@@ -223,17 +223,16 @@ int f7 (int8_t * restrict in, int8_t * restrict out, int n)
}
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]\s+\.L[0-9][0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 4 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-2.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-2.c
index 1e72f61..cc4fbba 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-2.c
@@ -192,16 +192,16 @@ void f6 (int8_t * restrict in, int8_t * restrict out, int n)
}
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle16\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle16\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle16\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle16\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle32\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle32\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-3.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-3.c
index 62d087d..ebbaafc 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_call-3.c
@@ -192,16 +192,16 @@ void f6 (int8_t * restrict in, int8_t * restrict out, int n)
}
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle16\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle16\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle16\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle16\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle32\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle32\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 5 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c
index 5a3e05e..cd94fda 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c
@@ -26,7 +26,6 @@ void f (int32_t * restrict in, int32_t * restrict out, size_t n, size_t cond, si
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]\s+\.L[0-9]:+} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli} 7 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli} 4 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-1.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-1.c
index f6ecebe..adb14e5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-1.c
@@ -69,13 +69,13 @@ void foo7 (void * restrict in, void * restrict out, int n)
}
}
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-2.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-2.c
index 39576c1..d3a060f 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-2.c
@@ -33,9 +33,9 @@ void foo3 (void * restrict in, void * restrict out, int n)
}
}
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-3.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-3.c
index f5fb770..bd1d9b2 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-3.c
@@ -33,6 +33,6 @@ void foo3 (void * restrict in, void * restrict out, int n)
}
}
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9][0-9]\:\s+vle8\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle8\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-4.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-4.c
index 63282f4..1ef0bf8 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-4.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-4.c
@@ -24,8 +24,8 @@ void foo3 (void * restrict in, void * restrict out, int n)
}
}
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle16\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle16\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle16\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle16\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-5.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-5.c
index d9cdb11..518c747 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-5.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-5.c
@@ -24,8 +24,8 @@ void foo3 (void * restrict in, void * restrict out, int n)
}
}
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle16\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
-/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]\:\s+vle16\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle16\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]\s+\.L[0-9]+\:\s+vle16\.v\s+v[0-9]+,0\s*\([a-x0-9]+\)} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf4,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index d072d66..228c21d 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -46,6 +46,12 @@ if { [ishost "*-*-cygwin*"] } {
setenv LANG C.ASCII
}
+# Set TERM to xterm to ensure that URL escapes are disabled.
+# This avoids issues where a diagnostic which could embed a URL
+# is emitted before -fdiagnostics-plain-output is handled, where
+# otherwise the output could be affected by the environment.
+setenv TERM xterm
+
# Avoid sporadic data-losses with expect
match_max -d 10000
diff --git a/gcc/toplev.cc b/gcc/toplev.cc
index 8bc1b69..0c2994e 100644
--- a/gcc/toplev.cc
+++ b/gcc/toplev.cc
@@ -1044,12 +1044,13 @@ general_init (const char *argv0, bool init_signals)
global_dc->m_show_column
= global_options_init.x_flag_show_column;
global_dc->m_internal_error = internal_error_function;
+ const unsigned lang_mask = lang_hooks.option_lang_mask ();
global_dc->set_option_hooks (option_enabled,
&global_options,
option_name,
get_option_url,
- lang_hooks.option_lang_mask ());
- global_dc->set_urlifier (make_gcc_urlifier ());
+ lang_mask);
+ global_dc->set_urlifier (make_gcc_urlifier (lang_mask));
if (init_signals)
{
diff --git a/gcc/tree-core.h b/gcc/tree-core.h
index d1c7136..8a89462 100644
--- a/gcc/tree-core.h
+++ b/gcc/tree-core.h
@@ -350,9 +350,6 @@ enum omp_clause_code {
/* OpenMP clause: doacross ({source,sink}:vec). */
OMP_CLAUSE_DOACROSS,
- /* OpenMP clause: indirect [(constant-integer-expression)]. */
- OMP_CLAUSE_INDIRECT,
-
/* Internal structure to hold OpenACC cache directive's variable-list.
#pragma acc cache (variable-list). */
OMP_CLAUSE__CACHE_,
@@ -497,6 +494,9 @@ enum omp_clause_code {
/* OpenMP clause: filter (integer-expression). */
OMP_CLAUSE_FILTER,
+ /* OpenMP clause: indirect [(constant-integer-expression)]. */
+ OMP_CLAUSE_INDIRECT,
+
/* Internally used only clause, holding SIMD uid. */
OMP_CLAUSE__SIMDUID_,
diff --git a/gcc/tree.cc b/gcc/tree.cc
index 82eff2b..8aee3ef 100644
--- a/gcc/tree.cc
+++ b/gcc/tree.cc
@@ -269,7 +269,6 @@ unsigned const char omp_clause_num_ops[] =
2, /* OMP_CLAUSE_MAP */
1, /* OMP_CLAUSE_HAS_DEVICE_ADDR */
1, /* OMP_CLAUSE_DOACROSS */
- 1, /* OMP_CLAUSE_INDIRECT */
2, /* OMP_CLAUSE__CACHE_ */
2, /* OMP_CLAUSE_GANG */
1, /* OMP_CLAUSE_ASYNC */
@@ -316,6 +315,7 @@ unsigned const char omp_clause_num_ops[] =
0, /* OMP_CLAUSE_ORDER */
0, /* OMP_CLAUSE_BIND */
1, /* OMP_CLAUSE_FILTER */
+ 1, /* OMP_CLAUSE_INDIRECT */
1, /* OMP_CLAUSE__SIMDUID_ */
0, /* OMP_CLAUSE__SIMT_ */
0, /* OMP_CLAUSE_INDEPENDENT */
@@ -362,7 +362,6 @@ const char * const omp_clause_code_name[] =
"map",
"has_device_addr",
"doacross",
- "indirect",
"_cache_",
"gang",
"async",
@@ -409,6 +408,7 @@ const char * const omp_clause_code_name[] =
"order",
"bind",
"filter",
+ "indirect",
"_simduid_",
"_simt_",
"independent",
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 473299f..d0d9674 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,7 @@
+2024-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ * libgomp.texi: Bump @copying's copyright year.
+
2023-12-21 Julian Brown <julian@codesourcery.com>
* testsuite/libgomp.fortran/target-enter-data-6.f90: Remove XFAIL.
diff --git a/libitm/ChangeLog b/libitm/ChangeLog
index 1494030..83aadd1 100644
--- a/libitm/ChangeLog
+++ b/libitm/ChangeLog
@@ -1,3 +1,7 @@
+2024-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ * libitm.texi: Bump @copying's copyright year.
+
2023-10-22 Iain Sandoe <iain@sandoe.co.uk>
* testsuite/lib/libitm.exp: Likewise.
diff --git a/libquadmath/ChangeLog b/libquadmath/ChangeLog
index f34e13c..43ad9df 100644
--- a/libquadmath/ChangeLog
+++ b/libquadmath/ChangeLog
@@ -1,3 +1,7 @@
+2024-01-03 Jakub Jelinek <jakub@redhat.com>
+
+ * libquadmath.texi: Bump @copying's copyright year.
+
2023-12-22 Christophe Lyon <christophe.lyon@linaro.org>
* Makefile.am: Allow overriding EXEPCT.
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index dc0c0df..768b9e7 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,10 @@
+2024-01-03 Patrick Palka <ppalka@redhat.com>
+
+ PR testsuite/113175
+ * testsuite/std/ranges/iota/max_size_type.cc (test02): Reduce
+ 'limit' to 100 from 1000 and adjust 'log2_limit' accordingly.
+ (test03): Likewise.
+
Copyright (C) 2024 Free Software Foundation, Inc.