Let me just make a first pass over this for minor/obvious issues.
+we have little control of the input to that specific pass. We
"control over" maybe?
+The testsuite is below @file{gcc/testsuite/rtl.dg}.
Not sure this needs to be in the manual (I have similar doubts about the
entire motivation section, but I guess we can keep it). Also, "below"?
+/* rtl-error.c - Replacement for errors.c for use by RTL frontend
+ Copyright (C) 2016 Free Software Foundation, Inc.
Why have this and not use the normal machinery?
+
+static bool
+rtl_langhook_handle_option (
+ size_t scode,
+ const char *arg,
+ int value ATTRIBUTE_UNUSED,
+ int kind ATTRIBUTE_UNUSED,
+ location_t loc ATTRIBUTE_UNUSED,
+ const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED)
Please line up the arguments, including the first, with the open paren.
For hooks I think we're converging towards just not naming unused args.
+
+ /* If -fsingle-pass=PASS_NAME was provided, locate and run PASS_NAME
+ on cfun, as created above. */
Comment text indented too much.
+/* Implementation of LANG_HOOKS_TYPE_FOR_MODE, taken from Go frontend. */
+
+static tree
+rtl_langhook_type_for_mode (machine_mode mode, int unsignedp)
+{
+ tree type;
+ /* Go has no vector types. Build them here. FIXME: It does not
+ make sense for the middle-end to ask the frontend for a type
+ which the frontend does not support. However, at least for now
+ it is required. See PR 46805. */
Hmm, not sure it makes much sense to have comments referencing Go.
+ if (VECTOR_MODE_P (mode))
+ {
+ tree inner;
+
+ inner = rtl_langhook_type_for_mode (GET_MODE_INNER (mode), unsignedp);
+ if (inner != NULL_TREE)
+ return build_vector_type_for_mode (inner, mode);
+ return NULL_TREE;
+ }
+
+ // FIXME: This static_cast should be in machmode.h.
+ enum mode_class mc = static_cast<enum mode_class>(GET_MODE_CLASS(mode));
+ if (mc == MODE_INT)
+ return rtl_langhook_type_for_size(GET_MODE_BITSIZE(mode), unsignedp);
Also not really following our coding standards. Presumably this is all
copied?
+#include <mpfr.h>
The include list probably wants checking whether everything is really
necessary; this one stood out as a bit odd (several files).
+
+#ifndef GCC_RUN_ONE_RTL_PASS_H
+#define GCC_RUN_ONE_RTL_PASS_H
+
+extern void run_one_rtl_pass_by_name (const char *pass_name);
+
+#endif /* GCC_RUN_ONE_RTL_PASS_H */
Do we really need an entire header file for a single declaration?
Bernd