Compare commits
5 Commits
Author | SHA1 | Date |
---|---|---|
Jakub Jelinek | ab5d0c7263 | |
Jakub Jelinek | 9089c61a38 | |
Jakub Jelinek | f69503f685 | |
Jakub Jelinek | 303e963cef | |
Jakub Jelinek | d211a17f16 |
|
@ -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
|
||||
|
|
93
gcc.spec
93
gcc.spec
|
@ -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)
|
||||
|
||||
|
|
|
@ -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" } } */
|
|
@ -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)= " \
|
||||
|
|
Loading…
Reference in New Issue