Compare commits

...

5 Commits
master ... f22

Author SHA1 Message Date
Jakub Jelinek ab5d0c7263 5.3.1-6 2016-04-06 13:32:33 +02:00
Jakub Jelinek 9089c61a38 5.3.1-5 2016-04-05 18:07:48 +02:00
Jakub Jelinek f69503f685 5.3.1-4 2016-02-12 14:00:57 +01:00
Jakub Jelinek 303e963cef 5.3.1-4 2016-02-12 13:27:29 +01:00
Jakub Jelinek d211a17f16 5.3.1-4 2016-02-12 13:12:44 +01:00
5 changed files with 90 additions and 258 deletions

3
.gitignore vendored
View File

@ -26,3 +26,6 @@
/gcc-5.2.1-20150929.tar.bz2
/gcc-5.2.1-20151104.tar.bz2
/gcc-5.3.1-20151207.tar.bz2
/gcc-5.3.1-20160212.tar.bz2
/gcc-5.3.1-20160405.tar.bz2
/gcc-5.3.1-20160406.tar.bz2

View File

@ -1,9 +1,9 @@
%global DATE 20151207
%global SVNREV 231358
%global DATE 20160406
%global SVNREV 234777
%global gcc_version 5.3.1
# Note, gcc_release must be integer, if you want to add suffixes to
# %{release}, append them after %{gcc_release} on Release: line.
%global gcc_release 2
%global gcc_release 6
%global _unpackaged_files_terminate_build 0
%global _performance_build 1
# Hardening slows the compiler way too much.
@ -206,8 +206,7 @@ Patch11: gcc5-no-add-needed.patch
Patch12: gcc5-libgo-p224.patch
Patch13: gcc5-aarch64-async-unw-tables.patch
Patch14: gcc5-libsanitize-aarch64-va42.patch
Patch15: gcc5-pr65689.patch
Patch16: gcc5-rh1279639.patch
Patch15: gcc5-rh1279639.patch
# On ARM EABI systems, we do want -gnueabi to be part of the
# target triple.
@ -774,8 +773,7 @@ package or when debugging this package.
rm -f libgo/go/crypto/elliptic/p224{,_test}.go
%patch13 -p0 -b .aarch64-async-unw-tables~
%patch14 -p0 -b .libsanitize-aarch64-va42~
%patch15 -p0 -b .pr65689~
%patch16 -p0 -b .rh1279639~
%patch15 -p0 -b .rh1279639~
sed -i -e 's/ -Wl,-z,nodlopen//g' gcc/ada/gcc-interface/Makefile.in
%if 0%{?_enable_debug_packages}
@ -3097,6 +3095,87 @@ fi
%doc rpm.doc/changelogs/libcc1/ChangeLog*
%changelog
* Wed Apr 6 2016 Jakub Jelinek <jakub@redhat.com> 5.3.1-6
- update from the 5 branch
- PRs c++/70430, middle-end/68963, middle-end/69760, middle-end/70022,
middle-end/70333, middle-end/70424, middle-end/70450,
rtl-optimization/70484, target/70510, tree-optimization/69983,
tree-optimization/70115, tree-optimization/70177
* Tue Apr 5 2016 Jakub Jelinek <jakub@redhat.com> 5.3.1-5
- update from the 5 branch
- PRs c++/51406, c++/51489, c++/65985, c++/67364, c++/67767, c++/68049,
c++/68585, c++/68679, c++/68890, c++/69261, c++/69323, c++/69743,
c++/69797, c++/69826, c++/69995, c++/70067, c++/70139, c++/70209,
c++/70272, c++/70393, c/69522, debug/69705, fortran/45076,
fortran/49630, fortran/52531, fortran/54070, fortran/57365,
fortran/60126, fortran/60593, fortran/60795, fortran/61147,
fortran/61156, fortran/64324, fortran/65795, fortran/65996,
fortran/66911, fortran/69423, fortran/70397, ipa/68672, ipa/70161,
ipa/70269, ipa/70306, libgfortran/69651, libgfortran/69668,
libgfortran/70235, libstdc++/69794, libstdc++/69939, lto/67709,
middle-end/69838, middle-end/69920, middle-end/70457, other/69006,
rtl-optimization/47992, rtl-optimization/68236,
rtl-optimization/68730, rtl-optimization/69032,
rtl-optimization/69102, rtl-optimization/69195,
rtl-optimization/69307, rtl-optimization/69609,
rtl-optimization/69648, rtl-optimization/69737,
rtl-optimization/69752, rtl-optimization/69764,
rtl-optimization/69771, rtl-optimization/69891,
rtl-optimization/69941, rtl-optimization/70007,
rtl-optimization/70222, rtl-optimization/70429,
rtl-optimization/70460, target/38239, target/61397, target/62281,
target/64411, target/65932, target/66660, target/67172, target/67260,
target/67714, target/67896, target/68973, target/69614, target/69625,
target/69875, target/69885, target/69888, target/69890, target/69917,
target/69969, target/70004, target/70028, target/70052, target/70059,
target/70062, target/70131, target/70168, target/70188, target/70293,
target/70296, target/70319, target/70325, target/70327, target/70329,
target/70406, target/70421, target/70453, target/70525,
testsuite/68580, testsuite/70356, tree-optimization/69666,
tree-optimization/69714, tree-optimization/69719,
tree-optimization/69740, tree-optimization/69776,
tree-optimization/69783, tree-optimization/69802,
tree-optimization/69989, tree-optimization/70152,
tree-optimization/70169
* Fri Feb 12 2016 Jakub Jelinek <jakub@redhat.com> 5.3.1-4
- update from the 5 branch
- PRs ada/69219, c++/25466, c++/59627, c++/63628, c++/66921, c++/67339,
c++/67376, c++/67411, c++/67550, c++/67576, c++/68449, c++/68926,
c++/68949, c++/68965, c++/68983, c++/69009, c++/69131, c/68062,
c/68162, c/68513, c/68668, c/69037, c/69669, debug/65779, debug/67355,
driver/67425, fortran/49954, fortran/50221, fortran/59746,
fortran/61831, fortran/62536, fortran/63932, fortran/66082,
fortran/66408, fortran/66680, fortran/66707, fortran/67451,
fortran/67674, fortran/67779, fortran/68216, fortran/68283,
fortran/68987, fortran/69128, fortran/69268, fortran/69418,
fortran/69484, go/68562, ipa/66616, ipa/68184, ipa/68790, ipa/68851,
libfortran/68987, libstdc++/60637, libstdc++/60976, libstdc++/68863,
libstdc++/68912, libstdc++/68921, libstdc++/68995, libstdc++/69005,
libstdc++/69092, libstdc++/69116, libstdc++/69222, lto/65948,
middle-end/65702, middle-end/67653, middle-end/68636,
middle-end/68960, middle-end/69308, middle-end/69542, other/60465,
other/67627, pch/68176, preprocessor/57580, rtl-opt/69447,
rtl-optimization/64557, rtl-optimization/64682,
rtl-optimization/67609, rtl-optimization/68670,
rtl-optimization/68910, rtl-optimization/68955,
rtl-optimization/69567, sanitizer/69055, sanitizer/69147, target/65546,
target/67032, target/67484, target/67895, target/68269, target/68648,
target/68701, target/68729, target/68741, target/68779, target/68872,
target/68986, target/69015, target/69118, target/69135, target/69140,
target/69187, target/69194, target/69198, target/69228, target/69305,
target/69403, target/69432, target/69459, target/69548, target/69551,
target/69644, target/69713, testsuite/68820, testsuite/69366,
tree-optimization/67755, tree-optimization/67781,
tree-optimization/68799, tree-optimization/68835,
tree-optimization/69013, tree-optimization/69110,
tree-optimization/69214, tree-optimization/69355,
tree-optimization/69399, tree-optimization/69426,
tree-optimization/69546, tree-optimization/69574,
tree-optimization/69579, tree-optimization/69606,
tree-optimization/69715
* Tue Dec 8 2015 Jakub Jelinek <jakub@redhat.com> 5.3.1-2
- work around doxygen 1.8.10 bugs (#1279639)

View File

@ -1,231 +0,0 @@
2015-04-17 Jakub Jelinek <jakub@redhat.com>
PR target/65689
* genpreds.c (struct constraint_data): Add maybe_allows_reg and
maybe_allows_mem bitfields.
(maybe_allows_none_start, maybe_allows_none_end,
maybe_allows_reg_start, maybe_allows_reg_end, maybe_allows_mem_start,
maybe_allows_mem_end): New variables.
(compute_maybe_allows): New function.
(add_constraint): Use it to initialize maybe_allows_reg and
maybe_allows_mem fields.
(choose_enum_order): Sort the non-is_register/is_const_int/is_memory/
is_address constraints such that those that allow neither mem nor
reg come first, then those that only allow reg but not mem, then
those that only allow mem but not reg, then the rest.
(write_allows_reg_mem_function): New function.
(write_tm_preds_h): Call it.
* stmt.c (parse_output_constraint, parse_input_constraint): Use
the generated insn_extra_constraint_allows_reg_mem function
instead of always setting *allows_reg = true; *allows_mem = true;
for unknown extra constraints.
* gcc.target/aarch64/c-output-template-4.c: New test.
--- gcc/genpreds.c.jj 2015-04-08 18:23:50.643556230 +0200
+++ gcc/genpreds.c 2015-04-17 17:44:23.097650110 +0200
@@ -640,12 +640,14 @@ struct constraint_data
const char *regclass; /* for register constraints */
rtx exp; /* for other constraints */
unsigned int lineno; /* line of definition */
- unsigned int is_register : 1;
- unsigned int is_const_int : 1;
- unsigned int is_const_dbl : 1;
- unsigned int is_extra : 1;
- unsigned int is_memory : 1;
- unsigned int is_address : 1;
+ unsigned int is_register : 1;
+ unsigned int is_const_int : 1;
+ unsigned int is_const_dbl : 1;
+ unsigned int is_extra : 1;
+ unsigned int is_memory : 1;
+ unsigned int is_address : 1;
+ unsigned int maybe_allows_reg : 1;
+ unsigned int maybe_allows_mem : 1;
};
/* Overview of all constraints beginning with a given letter. */
@@ -691,6 +693,9 @@ static unsigned int satisfied_start;
static unsigned int const_int_start, const_int_end;
static unsigned int memory_start, memory_end;
static unsigned int address_start, address_end;
+static unsigned int maybe_allows_none_start, maybe_allows_none_end;
+static unsigned int maybe_allows_reg_start, maybe_allows_reg_end;
+static unsigned int maybe_allows_mem_start, maybe_allows_mem_end;
/* Convert NAME, which contains angle brackets and/or underscores, to
a string that can be used as part of a C identifier. The string
@@ -711,6 +716,34 @@ mangle (const char *name)
return XOBFINISH (rtl_obstack, const char *);
}
+/* Return a bitmask, bit 1 if EXP maybe allows a REG/SUBREG, 2 if EXP
+ maybe allows a MEM. Bits should be clear only when we are sure it
+ will not allow a REG/SUBREG or a MEM. */
+static int
+compute_maybe_allows (rtx exp)
+{
+ switch (GET_CODE (exp))
+ {
+ case IF_THEN_ELSE:
+ /* Conservative answer is like IOR, of the THEN and ELSE branches. */
+ return compute_maybe_allows (XEXP (exp, 1))
+ | compute_maybe_allows (XEXP (exp, 2));
+ case AND:
+ return compute_maybe_allows (XEXP (exp, 0))
+ & compute_maybe_allows (XEXP (exp, 1));
+ case IOR:
+ return compute_maybe_allows (XEXP (exp, 0))
+ | compute_maybe_allows (XEXP (exp, 1));
+ case MATCH_CODE:
+ if (*XSTR (exp, 1) == '\0')
+ return (strstr (XSTR (exp, 0), "reg") != NULL ? 1 : 0)
+ | (strstr (XSTR (exp, 0), "mem") != NULL ? 2 : 0);
+ /* FALLTHRU */
+ default:
+ return 3;
+ }
+}
+
/* Add one constraint, of any sort, to the tables. NAME is its name;
REGCLASS is the register class, if any; EXP is the expression to
test, if any; IS_MEMORY and IS_ADDRESS indicate memory and address
@@ -866,6 +899,11 @@ add_constraint (const char *name, const
c->is_extra = !(regclass || is_const_int || is_const_dbl);
c->is_memory = is_memory;
c->is_address = is_address;
+ int maybe_allows = 3;
+ if (exp)
+ maybe_allows = compute_maybe_allows (exp);
+ c->maybe_allows_reg = (maybe_allows & 1) != 0;
+ c->maybe_allows_mem = (maybe_allows & 2) != 0;
c->next_this_letter = *slot;
*slot = c;
@@ -940,8 +978,30 @@ choose_enum_order (void)
enum_order[next++] = c;
address_end = next;
+ maybe_allows_none_start = next;
+ FOR_ALL_CONSTRAINTS (c)
+ if (!c->is_register && !c->is_const_int && !c->is_memory && !c->is_address
+ && !c->maybe_allows_reg && !c->maybe_allows_mem)
+ enum_order[next++] = c;
+ maybe_allows_none_end = next;
+
+ maybe_allows_reg_start = next;
+ FOR_ALL_CONSTRAINTS (c)
+ if (!c->is_register && !c->is_const_int && !c->is_memory && !c->is_address
+ && c->maybe_allows_reg && !c->maybe_allows_mem)
+ enum_order[next++] = c;
+ maybe_allows_reg_end = next;
+
+ maybe_allows_mem_start = next;
+ FOR_ALL_CONSTRAINTS (c)
+ if (!c->is_register && !c->is_const_int && !c->is_memory && !c->is_address
+ && !c->maybe_allows_reg && c->maybe_allows_mem)
+ enum_order[next++] = c;
+ maybe_allows_mem_end = next;
+
FOR_ALL_CONSTRAINTS (c)
- if (!c->is_register && !c->is_const_int && !c->is_memory && !c->is_address)
+ if (!c->is_register && !c->is_const_int && !c->is_memory && !c->is_address
+ && c->maybe_allows_reg && c->maybe_allows_mem)
enum_order[next++] = c;
gcc_assert (next == num_constraints);
}
@@ -1229,6 +1289,41 @@ write_range_function (const char *name,
"}\n\n", name);
}
+/* Write a definition for insn_extra_constraint_allows_reg_mem function. */
+static void
+write_allows_reg_mem_function (void)
+{
+ printf ("static inline void\n"
+ "insn_extra_constraint_allows_reg_mem (enum constraint_num c,\n"
+ "\t\t\t\t bool *allows_reg, bool *allows_mem)\n"
+ "{\n");
+ if (maybe_allows_none_start != maybe_allows_none_end)
+ printf (" if (c >= CONSTRAINT_%s && c <= CONSTRAINT_%s)\n"
+ " return;\n",
+ enum_order[maybe_allows_none_start]->c_name,
+ enum_order[maybe_allows_none_end - 1]->c_name);
+ if (maybe_allows_reg_start != maybe_allows_reg_end)
+ printf (" if (c >= CONSTRAINT_%s && c <= CONSTRAINT_%s)\n"
+ " {\n"
+ " *allows_reg = true;\n"
+ " return;\n"
+ " }\n",
+ enum_order[maybe_allows_reg_start]->c_name,
+ enum_order[maybe_allows_reg_end - 1]->c_name);
+ if (maybe_allows_mem_start != maybe_allows_mem_end)
+ printf (" if (c >= CONSTRAINT_%s && c <= CONSTRAINT_%s)\n"
+ " {\n"
+ " *allows_mem = true;\n"
+ " return;\n"
+ " }\n",
+ enum_order[maybe_allows_mem_start]->c_name,
+ enum_order[maybe_allows_mem_end - 1]->c_name);
+ printf (" (void) c;\n"
+ " *allows_reg = true;\n"
+ " *allows_mem = true;\n"
+ "}\n\n");
+}
+
/* VEC is a list of key/value pairs, with the keys being lower bounds
of a range. Output a decision tree that handles the keys covered by
[VEC[START], VEC[END]), returning FALLBACK for keys lower then VEC[START]'s.
@@ -1326,6 +1421,7 @@ write_tm_preds_h (void)
memory_start, memory_end);
write_range_function ("insn_extra_address_constraint",
address_start, address_end);
+ write_allows_reg_mem_function ();
if (constraint_max_namelen > 1)
{
--- gcc/stmt.c.jj 2015-04-08 18:23:50.660555956 +0200
+++ gcc/stmt.c 2015-04-17 17:36:50.623044548 +0200
@@ -342,13 +342,7 @@ parse_output_constraint (const char **co
else if (insn_extra_memory_constraint (cn))
*allows_mem = true;
else
- {
- /* Otherwise we can't assume anything about the nature of
- the constraint except that it isn't purely registers.
- Treat it like "g" and hope for the best. */
- *allows_reg = true;
- *allows_mem = true;
- }
+ insn_extra_constraint_allows_reg_mem (cn, allows_reg, allows_mem);
break;
}
@@ -465,13 +459,7 @@ parse_input_constraint (const char **con
else if (insn_extra_memory_constraint (cn))
*allows_mem = true;
else
- {
- /* Otherwise we can't assume anything about the nature of
- the constraint except that it isn't purely registers.
- Treat it like "g" and hope for the best. */
- *allows_reg = true;
- *allows_mem = true;
- }
+ insn_extra_constraint_allows_reg_mem (cn, allows_reg, allows_mem);
break;
}
--- gcc/testsuite/gcc.target/aarch64/c-output-template-4.c.jj 2015-04-17 17:48:27.588654584 +0200
+++ gcc/testsuite/gcc.target/aarch64/c-output-template-4.c 2015-04-17 17:48:22.149743468 +0200
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O0" } */
+
+void
+test (void)
+{
+ __asm__ ("@ %c0" : : "S" (&test + 4));
+}
+
+/* { dg-final { scan-assembler "@ test\\+4" } } */

View File

@ -9,25 +9,6 @@
include/ext/pb_ds/detail/branch_policy \
include/ext/pb_ds/detail/cc_hash_table_map_ \
include/ext/pb_ds/detail/eq_fn \
@@ -1965,18 +1964,6 @@ GENERATE_XML = @do_xml@
XML_OUTPUT = xml
-# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a
-# validating XML parser to check the syntax of the XML files.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_SCHEMA =
-
-# The XML_DTD tag can be used to specify a XML DTD, which can be used by a
-# validating XML parser to check the syntax of the XML files.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_DTD =
-
# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
@@ -2135,6 +2122,7 @@ PREDEFINED = __cplusplus=201103L \
_GLIBCXX_USE_CONSTEXPR=constexpr \
"_GLIBCXX_THROW(E)= " \

View File

@ -1 +1 @@
1458ebcc302cb4ac6bab5cbf8b3f3fcc gcc-5.3.1-20151207.tar.bz2
da0cf4c7b2e24ec463c54d8b6785715d gcc-5.3.1-20160406.tar.bz2