9.0.0-0.4
This commit is contained in:
parent
da335fc250
commit
cee0dddd34
1
.gitignore
vendored
1
.gitignore
vendored
@ -58,3 +58,4 @@
|
|||||||
/gcc-8.2.1-20181215.tar.xz
|
/gcc-8.2.1-20181215.tar.xz
|
||||||
/gcc-8.2.1-20190109.tar.xz
|
/gcc-8.2.1-20190109.tar.xz
|
||||||
/gcc-9.0.0-20190119.tar.xz
|
/gcc-9.0.0-20190119.tar.xz
|
||||||
|
/gcc-9.0.0-20190121.tar.xz
|
||||||
|
39
gcc.spec
39
gcc.spec
@ -1,10 +1,10 @@
|
|||||||
%global DATE 20190119
|
%global DATE 20190121
|
||||||
%global SVNREV 268094
|
%global SVNREV 268128
|
||||||
%global gcc_version 9.0.0
|
%global gcc_version 9.0.0
|
||||||
%global gcc_major 9
|
%global gcc_major 9
|
||||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||||
# %%{release}, append them after %%{gcc_release} on Release: line.
|
# %%{release}, append them after %%{gcc_release} on Release: line.
|
||||||
%global gcc_release 0.3
|
%global gcc_release 0.4
|
||||||
%global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f
|
%global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f
|
||||||
%global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24
|
%global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24
|
||||||
%global _unpackaged_files_terminate_build 0
|
%global _unpackaged_files_terminate_build 0
|
||||||
@ -258,11 +258,12 @@ Patch9: gcc9-Wno-format-security.patch
|
|||||||
Patch10: gcc9-rh1574936.patch
|
Patch10: gcc9-rh1574936.patch
|
||||||
Patch11: gcc9-d-shared-libphobos.patch
|
Patch11: gcc9-d-shared-libphobos.patch
|
||||||
Patch12: gcc9-pr88714.patch
|
Patch12: gcc9-pr88714.patch
|
||||||
Patch13: gcc9-pr88901.patch
|
Patch13: gcc9-pr88044.patch
|
||||||
Patch14: gcc9-pr88044.patch
|
Patch14: gcc9-pr88927.patch
|
||||||
Patch15: gcc9-utf-array-test.patch
|
Patch15: gcc9-pr87064.patch
|
||||||
Patch16: gcc9-aarch64-bootstrap.patch
|
Patch16: gcc9-pr88904.patch
|
||||||
Patch17: gcc9-pr88927.patch
|
Patch17: gcc9-pr88905.patch
|
||||||
|
Patch18: gcc9-pr88906.patch
|
||||||
|
|
||||||
Patch1000: nvptx-tools-no-ptxas.patch
|
Patch1000: nvptx-tools-no-ptxas.patch
|
||||||
Patch1001: nvptx-tools-build.patch
|
Patch1001: nvptx-tools-build.patch
|
||||||
@ -842,11 +843,12 @@ to NVidia PTX capable devices if available.
|
|||||||
%endif
|
%endif
|
||||||
%patch11 -p0 -b .d-shared-libphobos~
|
%patch11 -p0 -b .d-shared-libphobos~
|
||||||
%patch12 -p0 -b .pr88714~
|
%patch12 -p0 -b .pr88714~
|
||||||
%patch13 -p0 -b .pr88901~
|
%patch13 -p0 -b .pr88044~
|
||||||
%patch14 -p0 -b .pr88044~
|
%patch14 -p0 -b .pr88927~
|
||||||
%patch15 -p0 -b .utf-array-test~
|
%patch15 -p0 -b .pr87064~
|
||||||
%patch16 -p0 -b .aarch64-bootstrap~
|
%patch16 -p0 -b .pr88904~
|
||||||
%patch17 -p0 -b .pr88927~
|
%patch17 -p0 -b .pr88905~
|
||||||
|
%patch18 -p0 -b .pr88906~
|
||||||
|
|
||||||
cd nvptx-tools-%{nvptx_tools_gitrev}
|
cd nvptx-tools-%{nvptx_tools_gitrev}
|
||||||
%patch1000 -p1 -b .nvptx-tools-no-ptxas~
|
%patch1000 -p1 -b .nvptx-tools-no-ptxas~
|
||||||
@ -3180,6 +3182,17 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jan 21 2019 Jakub Jelinek <jakub@redhat.com> 9.0.0-0.4
|
||||||
|
- update from trunk
|
||||||
|
- PRs c++/88949, c/88928, fortran/37835, fortran/56789, fortran/77960,
|
||||||
|
ipa/87615, libstdc++/86590, target/71659, target/88938,
|
||||||
|
tree-optimization/88934
|
||||||
|
- fix up min/max reduction on ppc64le (PR target/87064)
|
||||||
|
- fix up thread_jump on thumb1 (PR rtl-optimization/88904)
|
||||||
|
- fix up doubleword unop REG_EQUAL notes with const args (PR target/88905)
|
||||||
|
- fix up DSE on memcpy/memmove/memcmp libcalls (PR rtl-optimization/49429,
|
||||||
|
PR target/49454, PR rtl-optimization/86334, PR target/88906)
|
||||||
|
|
||||||
* Sat Jan 19 2019 Jakub Jelinek <jakub@redhat.com> 9.0.0-0.3
|
* Sat Jan 19 2019 Jakub Jelinek <jakub@redhat.com> 9.0.0-0.3
|
||||||
- update from trunk
|
- update from trunk
|
||||||
- PRs c++/86205, c++/86740, c++/86926, c++/88699, c++/88875, c/88664,
|
- PRs c++/86205, c++/86740, c++/86926, c++/88699, c++/88875, c/88664,
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
2019-01-19 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
* config/aarch64/aarch64.c (aarch64_stack_protect_guard): Move
|
|
||||||
outside of #if CHECKING_P code.
|
|
||||||
|
|
||||||
--- gcc/config/aarch64/aarch64.c.jj 2019-01-19 09:39:18.859831024 +0100
|
|
||||||
+++ gcc/config/aarch64/aarch64.c 2019-01-19 18:25:18.037239167 +0100
|
|
||||||
@@ -18662,6 +18662,19 @@ aarch64_simd_clone_usable (struct cgraph
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Implement TARGET_STACK_PROTECT_GUARD. In case of a
|
|
||||||
+ global variable based guard use the default else
|
|
||||||
+ return a null tree. */
|
|
||||||
+static tree
|
|
||||||
+aarch64_stack_protect_guard (void)
|
|
||||||
+{
|
|
||||||
+ if (aarch64_stack_protector_guard == SSP_GLOBAL)
|
|
||||||
+ return default_stack_protect_guard ();
|
|
||||||
+
|
|
||||||
+ return NULL_TREE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* Target-specific selftests. */
|
|
||||||
|
|
||||||
#if CHECKING_P
|
|
||||||
@@ -18706,19 +18719,6 @@ aarch64_run_selftests (void)
|
|
||||||
|
|
||||||
} // namespace selftest
|
|
||||||
|
|
||||||
-/* Implement TARGET_STACK_PROTECT_GUARD. In case of a
|
|
||||||
- global variable based guard use the default else
|
|
||||||
- return a null tree. */
|
|
||||||
-static tree
|
|
||||||
-aarch64_stack_protect_guard (void)
|
|
||||||
-{
|
|
||||||
- if (aarch64_stack_protector_guard == SSP_GLOBAL)
|
|
||||||
- return default_stack_protect_guard ();
|
|
||||||
-
|
|
||||||
- return NULL_TREE;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-
|
|
||||||
#endif /* #if CHECKING_P */
|
|
||||||
|
|
||||||
#undef TARGET_STACK_PROTECT_GUARD
|
|
17
gcc9-pr87064.patch
Normal file
17
gcc9-pr87064.patch
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
2019-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR target/87064
|
||||||
|
* config/rs6000/vsx.md (*vsx_reduc_<VEC_reduc_name>_v2df_scalar):
|
||||||
|
Disable for little endian.
|
||||||
|
|
||||||
|
--- gcc/config/rs6000/vsx.md.jj 2019-01-19 09:39:13.224924063 +0100
|
||||||
|
+++ gcc/config/rs6000/vsx.md 2019-01-21 23:39:27.527774247 +0100
|
||||||
|
@@ -4351,7 +4351,7 @@ (define_insn_and_split "*vsx_reduc_<VEC_
|
||||||
|
(match_dup 1))
|
||||||
|
(parallel [(const_int 1)])))
|
||||||
|
(clobber (match_scratch:DF 2 "=0,0,&wd,&wa"))]
|
||||||
|
- "VECTOR_UNIT_VSX_P (V2DFmode)"
|
||||||
|
+ "BYTES_BIG_ENDIAN && VECTOR_UNIT_VSX_P (V2DFmode)"
|
||||||
|
"#"
|
||||||
|
""
|
||||||
|
[(const_int 0)]
|
@ -1,45 +0,0 @@
|
|||||||
2019-01-18 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR sanitizer/88901
|
|
||||||
* typeck.c (cp_build_binary_op): Don't instrument
|
|
||||||
SANITIZE_POINTER_COMPARE if processing_template_decl.
|
|
||||||
(pointer_diff): Similarly for SANITIZE_POINTER_SUBTRACT.
|
|
||||||
|
|
||||||
* g++.dg/asan/pr88901.C: New test.
|
|
||||||
|
|
||||||
--- gcc/cp/typeck.c.jj 2019-01-18 09:13:58.580790058 +0100
|
|
||||||
+++ gcc/cp/typeck.c 2019-01-18 11:53:45.941734135 +0100
|
|
||||||
@@ -5233,6 +5233,7 @@ cp_build_binary_op (const op_location_t
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE)
|
|
||||||
+ && !processing_template_decl
|
|
||||||
&& sanitize_flags_p (SANITIZE_POINTER_COMPARE))
|
|
||||||
{
|
|
||||||
op0 = save_expr (op0);
|
|
||||||
@@ -5650,7 +5651,8 @@ pointer_diff (location_t loc, tree op0,
|
|
||||||
else
|
|
||||||
inttype = restype;
|
|
||||||
|
|
||||||
- if (sanitize_flags_p (SANITIZE_POINTER_SUBTRACT))
|
|
||||||
+ if (!processing_template_decl
|
|
||||||
+ && sanitize_flags_p (SANITIZE_POINTER_SUBTRACT))
|
|
||||||
{
|
|
||||||
op0 = save_expr (op0);
|
|
||||||
op1 = save_expr (op1);
|
|
||||||
--- gcc/testsuite/g++.dg/asan/pr88901.C.jj 2019-01-18 11:55:42.398826983 +0100
|
|
||||||
+++ gcc/testsuite/g++.dg/asan/pr88901.C 2019-01-18 11:55:26.559086374 +0100
|
|
||||||
@@ -0,0 +1,13 @@
|
|
||||||
+// PR sanitizer/88901
|
|
||||||
+// { dg-do compile }
|
|
||||||
+// { dg-options "-fsanitize=address -fsanitize=pointer-compare" }
|
|
||||||
+
|
|
||||||
+template <typename T>
|
|
||||||
+struct A {
|
|
||||||
+ void foo() {
|
|
||||||
+ auto d = [](char *x, char *y) {
|
|
||||||
+ for (char *p = x; p + sizeof(T) <= y; p += sizeof(T))
|
|
||||||
+ reinterpret_cast<T *>(p)->~T();
|
|
||||||
+ };
|
|
||||||
+ }
|
|
||||||
+};
|
|
77
gcc9-pr88904.patch
Normal file
77
gcc9-pr88904.patch
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
2019-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR rtl-optimization/88904
|
||||||
|
* cfgcleanup.c (thread_jump): Verify cond2 doesn't mention
|
||||||
|
any nonequal registers before processing BB_END (b).
|
||||||
|
|
||||||
|
* gcc.c-torture/execute/pr88904.c: New test.
|
||||||
|
|
||||||
|
--- gcc/cfgcleanup.c.jj 2019-01-01 12:37:19.147942300 +0100
|
||||||
|
+++ gcc/cfgcleanup.c 2019-01-21 16:45:52.576636305 +0100
|
||||||
|
@@ -338,6 +338,13 @@ thread_jump (edge e, basic_block b)
|
||||||
|
insn != NEXT_INSN (BB_END (b)) && !failed;
|
||||||
|
insn = NEXT_INSN (insn))
|
||||||
|
{
|
||||||
|
+ /* cond2 must not mention any register that is not equal to the
|
||||||
|
+ former block. Check this before processing that instruction,
|
||||||
|
+ as BB_END (b) could contain also clobbers. */
|
||||||
|
+ if (insn == BB_END (b)
|
||||||
|
+ && mentions_nonequal_regs (cond2, nonequal))
|
||||||
|
+ goto failed_exit;
|
||||||
|
+
|
||||||
|
if (INSN_P (insn))
|
||||||
|
{
|
||||||
|
rtx pat = PATTERN (insn);
|
||||||
|
@@ -362,11 +369,6 @@ thread_jump (edge e, basic_block b)
|
||||||
|
goto failed_exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* cond2 must not mention any register that is not equal to the
|
||||||
|
- former block. */
|
||||||
|
- if (mentions_nonequal_regs (cond2, nonequal))
|
||||||
|
- goto failed_exit;
|
||||||
|
-
|
||||||
|
EXECUTE_IF_SET_IN_REG_SET (nonequal, 0, i, rsi)
|
||||||
|
goto failed_exit;
|
||||||
|
|
||||||
|
--- gcc/testsuite/gcc.c-torture/execute/pr88904.c.jj 2019-01-21 16:47:16.194265770 +0100
|
||||||
|
+++ gcc/testsuite/gcc.c-torture/execute/pr88904.c 2019-01-21 16:46:59.278543027 +0100
|
||||||
|
@@ -0,0 +1,38 @@
|
||||||
|
+/* PR rtl-optimization/88904 */
|
||||||
|
+
|
||||||
|
+volatile int v;
|
||||||
|
+
|
||||||
|
+__attribute__((noipa)) void
|
||||||
|
+bar (const char *x, const char *y, int z)
|
||||||
|
+{
|
||||||
|
+ if (!v)
|
||||||
|
+ __builtin_abort ();
|
||||||
|
+ asm volatile ("" : "+g" (x));
|
||||||
|
+ asm volatile ("" : "+g" (y));
|
||||||
|
+ asm volatile ("" : "+g" (z));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#define my_assert(e) ((e) ? (void) 0 : bar (#e, __FILE__, __LINE__))
|
||||||
|
+
|
||||||
|
+typedef struct {
|
||||||
|
+ unsigned M1;
|
||||||
|
+ unsigned M2 : 1;
|
||||||
|
+ int : 0;
|
||||||
|
+ unsigned M3 : 1;
|
||||||
|
+} S;
|
||||||
|
+
|
||||||
|
+S
|
||||||
|
+foo ()
|
||||||
|
+{
|
||||||
|
+ S result = {0, 0, 1};
|
||||||
|
+ return result;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main ()
|
||||||
|
+{
|
||||||
|
+ S ret = foo ();
|
||||||
|
+ my_assert (ret.M2 == 0);
|
||||||
|
+ my_assert (ret.M3 == 1);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
142
gcc9-pr88905.patch
Normal file
142
gcc9-pr88905.patch
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
2019-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR target/88905
|
||||||
|
* optabs.c (add_equal_note): Add op0_mode argument, use it instead of
|
||||||
|
GET_MODE (op0).
|
||||||
|
(expand_binop_directly, expand_doubleword_clz,
|
||||||
|
expand_doubleword_popcount, expand_ctz, expand_ffs,
|
||||||
|
expand_unop_direct, maybe_emit_unop_insn): Adjust callers.
|
||||||
|
|
||||||
|
* gcc.dg/pr88905.c: New test.
|
||||||
|
|
||||||
|
--- gcc/optabs.c.jj 2019-01-01 12:37:17.711965861 +0100
|
||||||
|
+++ gcc/optabs.c 2019-01-21 13:56:18.263446049 +0100
|
||||||
|
@@ -55,7 +55,7 @@ void debug_optab_libfuncs (void);
|
||||||
|
|
||||||
|
/* Add a REG_EQUAL note to the last insn in INSNS. TARGET is being set to
|
||||||
|
the result of operation CODE applied to OP0 (and OP1 if it is a binary
|
||||||
|
- operation).
|
||||||
|
+ operation). OP0_MODE is OP0's mode.
|
||||||
|
|
||||||
|
If the last insn does not set TARGET, don't do anything, but return 1.
|
||||||
|
|
||||||
|
@@ -64,7 +64,8 @@ void debug_optab_libfuncs (void);
|
||||||
|
try again, ensuring that TARGET is not one of the operands. */
|
||||||
|
|
||||||
|
static int
|
||||||
|
-add_equal_note (rtx_insn *insns, rtx target, enum rtx_code code, rtx op0, rtx op1)
|
||||||
|
+add_equal_note (rtx_insn *insns, rtx target, enum rtx_code code, rtx op0,
|
||||||
|
+ rtx op1, machine_mode op0_mode)
|
||||||
|
{
|
||||||
|
rtx_insn *last_insn;
|
||||||
|
rtx set;
|
||||||
|
@@ -136,16 +137,16 @@ add_equal_note (rtx_insn *insns, rtx tar
|
||||||
|
case POPCOUNT:
|
||||||
|
case PARITY:
|
||||||
|
case BSWAP:
|
||||||
|
- if (GET_MODE (op0) != VOIDmode && GET_MODE (target) != GET_MODE (op0))
|
||||||
|
+ if (op0_mode != VOIDmode && GET_MODE (target) != op0_mode)
|
||||||
|
{
|
||||||
|
- note = gen_rtx_fmt_e (code, GET_MODE (op0), copy_rtx (op0));
|
||||||
|
- if (GET_MODE_UNIT_SIZE (GET_MODE (op0))
|
||||||
|
+ note = gen_rtx_fmt_e (code, op0_mode, copy_rtx (op0));
|
||||||
|
+ if (GET_MODE_UNIT_SIZE (op0_mode)
|
||||||
|
> GET_MODE_UNIT_SIZE (GET_MODE (target)))
|
||||||
|
note = simplify_gen_unary (TRUNCATE, GET_MODE (target),
|
||||||
|
- note, GET_MODE (op0));
|
||||||
|
+ note, op0_mode);
|
||||||
|
else
|
||||||
|
note = simplify_gen_unary (ZERO_EXTEND, GET_MODE (target),
|
||||||
|
- note, GET_MODE (op0));
|
||||||
|
+ note, op0_mode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* FALLTHRU */
|
||||||
|
@@ -1127,7 +1128,7 @@ expand_binop_directly (enum insn_code ic
|
||||||
|
if (INSN_P (pat) && NEXT_INSN (pat) != NULL_RTX
|
||||||
|
&& ! add_equal_note (pat, ops[0].value,
|
||||||
|
optab_to_code (binoptab),
|
||||||
|
- ops[1].value, ops[2].value))
|
||||||
|
+ ops[1].value, ops[2].value, mode0))
|
||||||
|
{
|
||||||
|
delete_insns_since (last);
|
||||||
|
return expand_binop (mode, binoptab, op0, op1, NULL_RTX,
|
||||||
|
@@ -2298,7 +2299,7 @@ expand_doubleword_clz (scalar_int_mode m
|
||||||
|
seq = get_insns ();
|
||||||
|
end_sequence ();
|
||||||
|
|
||||||
|
- add_equal_note (seq, target, CLZ, xop0, 0);
|
||||||
|
+ add_equal_note (seq, target, CLZ, xop0, NULL_RTX, mode);
|
||||||
|
emit_insn (seq);
|
||||||
|
return target;
|
||||||
|
|
||||||
|
@@ -2340,7 +2341,7 @@ expand_doubleword_popcount (scalar_int_m
|
||||||
|
seq = get_insns ();
|
||||||
|
end_sequence ();
|
||||||
|
|
||||||
|
- add_equal_note (seq, t, POPCOUNT, op0, 0);
|
||||||
|
+ add_equal_note (seq, t, POPCOUNT, op0, NULL_RTX, mode);
|
||||||
|
emit_insn (seq);
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
@@ -2511,7 +2512,7 @@ expand_ctz (scalar_int_mode mode, rtx op
|
||||||
|
seq = get_insns ();
|
||||||
|
end_sequence ();
|
||||||
|
|
||||||
|
- add_equal_note (seq, temp, CTZ, op0, 0);
|
||||||
|
+ add_equal_note (seq, temp, CTZ, op0, NULL_RTX, mode);
|
||||||
|
emit_insn (seq);
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
@@ -2589,7 +2590,7 @@ expand_ffs (scalar_int_mode mode, rtx op
|
||||||
|
seq = get_insns ();
|
||||||
|
end_sequence ();
|
||||||
|
|
||||||
|
- add_equal_note (seq, temp, FFS, op0, 0);
|
||||||
|
+ add_equal_note (seq, temp, FFS, op0, NULL_RTX, mode);
|
||||||
|
emit_insn (seq);
|
||||||
|
return temp;
|
||||||
|
|
||||||
|
@@ -2736,7 +2737,7 @@ expand_unop_direct (machine_mode mode, o
|
||||||
|
if (INSN_P (pat) && NEXT_INSN (pat) != NULL_RTX
|
||||||
|
&& ! add_equal_note (pat, ops[0].value,
|
||||||
|
optab_to_code (unoptab),
|
||||||
|
- ops[1].value, NULL_RTX))
|
||||||
|
+ ops[1].value, NULL_RTX, mode))
|
||||||
|
{
|
||||||
|
delete_insns_since (last);
|
||||||
|
return expand_unop (mode, unoptab, op0, NULL_RTX, unsignedp);
|
||||||
|
@@ -3588,7 +3589,8 @@ maybe_emit_unop_insn (enum insn_code ico
|
||||||
|
|
||||||
|
if (INSN_P (pat) && NEXT_INSN (pat) != NULL_RTX
|
||||||
|
&& code != UNKNOWN)
|
||||||
|
- add_equal_note (pat, ops[0].value, code, ops[1].value, NULL_RTX);
|
||||||
|
+ add_equal_note (pat, ops[0].value, code, ops[1].value, NULL_RTX,
|
||||||
|
+ GET_MODE (op0));
|
||||||
|
|
||||||
|
emit_insn (pat);
|
||||||
|
|
||||||
|
--- gcc/testsuite/gcc.dg/pr88905.c.jj 2019-01-21 14:19:17.279746531 +0100
|
||||||
|
+++ gcc/testsuite/gcc.dg/pr88905.c 2019-01-21 14:18:56.264091537 +0100
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+/* PR target/88905 */
|
||||||
|
+/* { dg-do compile } */
|
||||||
|
+/* { dg-options "-Og -fno-tree-ccp" } */
|
||||||
|
+/* { dg-additional-options "-mabm" { target { i?86-*-* x86_64-*-* } } } */
|
||||||
|
+
|
||||||
|
+int a, b, c;
|
||||||
|
+extern void baz (int);
|
||||||
|
+
|
||||||
|
+static inline int
|
||||||
|
+bar (unsigned u)
|
||||||
|
+{
|
||||||
|
+ int i = __builtin_popcountll (-(unsigned long long) u);
|
||||||
|
+ baz (i & c);
|
||||||
|
+ return a + b + c;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+foo (void)
|
||||||
|
+{
|
||||||
|
+ bar (2376498292ULL);
|
||||||
|
+}
|
94
gcc9-pr88906.patch
Normal file
94
gcc9-pr88906.patch
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
2019-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR rtl-optimization/49429
|
||||||
|
PR target/49454
|
||||||
|
PR rtl-optimization/86334
|
||||||
|
PR target/88906
|
||||||
|
* expr.c (emit_block_move_hints): Move marking of MEM_EXPRs
|
||||||
|
addressable from here...
|
||||||
|
(emit_block_op_via_libcall): ... to here.
|
||||||
|
|
||||||
|
* gcc.target/i386/pr86334.c: New test.
|
||||||
|
* gcc.target/i386/pr88906.c: New test.
|
||||||
|
|
||||||
|
--- gcc/expr.c.jj 2019-01-10 11:43:08.958466880 +0100
|
||||||
|
+++ gcc/expr.c 2019-01-21 12:06:41.782406169 +0100
|
||||||
|
@@ -1631,14 +1631,6 @@ emit_block_move_hints (rtx x, rtx y, rtx
|
||||||
|
if (may_use_call < 0)
|
||||||
|
return pc_rtx;
|
||||||
|
|
||||||
|
- /* Since x and y are passed to a libcall, mark the corresponding
|
||||||
|
- tree EXPR as addressable. */
|
||||||
|
- tree y_expr = MEM_EXPR (y);
|
||||||
|
- tree x_expr = MEM_EXPR (x);
|
||||||
|
- if (y_expr)
|
||||||
|
- mark_addressable (y_expr);
|
||||||
|
- if (x_expr)
|
||||||
|
- mark_addressable (x_expr);
|
||||||
|
retval = emit_block_copy_via_libcall (x, y, size,
|
||||||
|
method == BLOCK_OP_TAILCALL);
|
||||||
|
}
|
||||||
|
@@ -1884,6 +1876,15 @@ emit_block_op_via_libcall (enum built_in
|
||||||
|
tree call_expr, dst_tree, src_tree, size_tree;
|
||||||
|
machine_mode size_mode;
|
||||||
|
|
||||||
|
+ /* Since dst and src are passed to a libcall, mark the corresponding
|
||||||
|
+ tree EXPR as addressable. */
|
||||||
|
+ tree dst_expr = MEM_EXPR (dst);
|
||||||
|
+ tree src_expr = MEM_EXPR (src);
|
||||||
|
+ if (dst_expr)
|
||||||
|
+ mark_addressable (dst_expr);
|
||||||
|
+ if (src_expr)
|
||||||
|
+ mark_addressable (src_expr);
|
||||||
|
+
|
||||||
|
dst_addr = copy_addr_to_reg (XEXP (dst, 0));
|
||||||
|
dst_addr = convert_memory_address (ptr_mode, dst_addr);
|
||||||
|
dst_tree = make_tree (ptr_type_node, dst_addr);
|
||||||
|
--- gcc/testsuite/gcc.target/i386/pr86334.c.jj 2019-01-21 17:52:04.408370956 +0100
|
||||||
|
+++ gcc/testsuite/gcc.target/i386/pr86334.c 2019-01-21 17:52:58.504482908 +0100
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+/* PR rtl-optimization/86334 */
|
||||||
|
+/* { dg-do run { target ia32 } } */
|
||||||
|
+/* { dg-options "-O -march=i386 -mtune=athlon -minline-all-stringops -minline-stringops-dynamically -mmemcpy-strategy=libcall:-1:align -Wno-psabi" } */
|
||||||
|
+
|
||||||
|
+typedef int V __attribute__ ((vector_size (64)));
|
||||||
|
+
|
||||||
|
+static inline V
|
||||||
|
+foo (V g)
|
||||||
|
+{
|
||||||
|
+ g[0] = 4;
|
||||||
|
+ return g;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main ()
|
||||||
|
+{
|
||||||
|
+ V x = foo ((V) { });
|
||||||
|
+ if (x[0] != 4 || x[1] || x[2] || x[3] || x[4] || x[5] || x[6] || x[7])
|
||||||
|
+ __builtin_abort ();
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
--- gcc/testsuite/gcc.target/i386/pr88906.c.jj 2019-01-21 12:08:53.110252030 +0100
|
||||||
|
+++ gcc/testsuite/gcc.target/i386/pr88906.c 2019-01-21 17:53:08.082325657 +0100
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+/* PR target/88906 */
|
||||||
|
+/* { dg-do run { target ia32 } } */
|
||||||
|
+/* { dg-options "-O -march=i386 -mtune=k6 -minline-all-stringops -minline-stringops-dynamically -mmemcpy-strategy=libcall:-1:align -Wno-psabi" } */
|
||||||
|
+
|
||||||
|
+typedef unsigned V __attribute__ ((vector_size (16)));
|
||||||
|
+
|
||||||
|
+static inline V
|
||||||
|
+foo (V v)
|
||||||
|
+{
|
||||||
|
+ __builtin_sub_overflow (0, 0, &v[0]);
|
||||||
|
+ return v;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main ()
|
||||||
|
+{
|
||||||
|
+ V v = foo ((V) { ~0 });
|
||||||
|
+ if (v[0] || v[1] || v[2] || v[3])
|
||||||
|
+ __builtin_abort ();
|
||||||
|
+ return 0;
|
||||||
|
+}
|
@ -1,32 +0,0 @@
|
|||||||
2019-01-18 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
* gcc.dg/utf-array.c: Allow wchar_t to be printed as
|
|
||||||
{long ,short ,}{unsigned ,}int.
|
|
||||||
|
|
||||||
--- gcc/testsuite/gcc.dg/utf-array.c.jj 2019-01-18 00:33:20.867980701 +0100
|
|
||||||
+++ gcc/testsuite/gcc.dg/utf-array.c 2019-01-18 23:32:57.086524528 +0100
|
|
||||||
@@ -12,13 +12,13 @@ typedef __CHAR32_TYPE__ char32_t;
|
|
||||||
const char s_0[] = "ab";
|
|
||||||
const char s_1[] = u"ab"; /* { dg-error "from a string literal with type array of" } */
|
|
||||||
const char s_2[] = U"ab"; /* { dg-error "from a string literal with type array of" } */
|
|
||||||
-const char s_3[] = L"ab"; /* { dg-error "from a string literal with type array of .int." } */
|
|
||||||
+const char s_3[] = L"ab"; /* { dg-error "from a string literal with type array of .(long |short )?(unsigned )?int." } */
|
|
||||||
const char s_4[] = u8"ab";
|
|
||||||
|
|
||||||
const char16_t s16_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */
|
|
||||||
const char16_t s16_1[] = u"ab";
|
|
||||||
const char16_t s16_2[] = U"ab"; /* { dg-error "from a string literal with type array of" } */
|
|
||||||
-const char16_t s16_3[] = L"ab"; /* { dg-error "from a string literal with type array of .int." "" { target { ! wchar_t_char16_t_compatible } } } */
|
|
||||||
+const char16_t s16_3[] = L"ab"; /* { dg-error "from a string literal with type array of .(long |short )?(unsigned )?int." "" { target { ! wchar_t_char16_t_compatible } } } */
|
|
||||||
const char16_t s16_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */
|
|
||||||
|
|
||||||
const char16_t s16_5[0] = u"ab"; /* { dg-warning "chars is too long" } */
|
|
||||||
@@ -30,7 +30,7 @@ const char16_t s16_9[4] = u"ab";
|
|
||||||
const char32_t s32_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */
|
|
||||||
const char32_t s32_1[] = u"ab"; /* { dg-error "from a string literal with type array of" } */
|
|
||||||
const char32_t s32_2[] = U"ab";
|
|
||||||
-const char32_t s32_3[] = L"ab"; /* { dg-error "from a string literal with type array of .int." "" { target { ! wchar_t_char32_t_compatible } } } */
|
|
||||||
+const char32_t s32_3[] = L"ab"; /* { dg-error "from a string literal with type array of .(long |short )?(unsigned )?int." "" { target { ! wchar_t_char32_t_compatible } } } */
|
|
||||||
const char32_t s32_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */
|
|
||||||
|
|
||||||
const char32_t s32_5[0] = U"ab"; /* { dg-warning "chars is too long" } */
|
|
2
sources
2
sources
@ -1,3 +1,3 @@
|
|||||||
SHA512 (gcc-9.0.0-20190119.tar.xz) = 22d58049867a220493ec77da591ebf4a4bc05513451f31a4e9d990035b0a6f571d495fc86ec607bb6eb7aebb310e57ccab669b764d07503ce1e6f6109b893262
|
SHA512 (gcc-9.0.0-20190121.tar.xz) = 18dda8f278e99e1cf93fb30f60faa2b4828c13f289de7412e62d59076357b0674f5ae891ac879d7d47a18cf0c291fdb34795162180fc9c9b2651ad42ca08f478
|
||||||
SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.xz) = 94f7089365296f7dfa485107b4143bebc850a81586f3460fd896bbbb6ba099a00217d4042133424fd2183b352132f4fd367e6a60599bdae2a26dfd48a77d0e04
|
SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.xz) = 94f7089365296f7dfa485107b4143bebc850a81586f3460fd896bbbb6ba099a00217d4042133424fd2183b352132f4fd367e6a60599bdae2a26dfd48a77d0e04
|
||||||
SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.xz) = a688cb12cf805950a5abbb13b52f45c81dbee98e310b7ed57ae20e76dbfa5964a16270148374a6426d177db71909d28360490f091c86a5d19d4faa5127beeee1
|
SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.xz) = a688cb12cf805950a5abbb13b52f45c81dbee98e310b7ed57ae20e76dbfa5964a16270148374a6426d177db71909d28360490f091c86a5d19d4faa5127beeee1
|
||||||
|
Loading…
Reference in New Issue
Block a user