aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2022-11-14 09:15:43 +0100
committerTobias Burnus <tobias@codesourcery.com>2022-11-14 09:15:43 +0100
commitd83a083287f91d7fb83c7e9cd29272ffeec28480 (patch)
treeea5a1816f95b065c08ba958940b78be5c620ba71 /gcc
parentc56df70095fc101648928cb31a4c73b68ee911bb (diff)
parent58da1386d2233b8e01aaac8f7c4a61a2ccf52743 (diff)
downloadgcc-d83a083287f91d7fb83c7e9cd29272ffeec28480.zip
gcc-d83a083287f91d7fb83c7e9cd29272ffeec28480.tar.gz
gcc-d83a083287f91d7fb83c7e9cd29272ffeec28480.tar.bz2
Merge branch 'releases/gcc-12' into devel/omp/gcc-12
Merge up to r12-8907-g58da1386d2233b8e01aaac8f7c4a61a2ccf52743 (14th Nov 2022)
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog36
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/alias.cc19
-rw-r--r--gcc/config/i386/driver-i386.cc13
-rw-r--r--gcc/config/i386/i386.h7
-rw-r--r--gcc/doc/cppopts.texi7
-rw-r--r--gcc/doc/invoke.texi8
-rw-r--r--gcc/expr.cc3
-rw-r--r--gcc/fold-const.cc18
-rw-r--r--gcc/testsuite/ChangeLog18
-rw-r--r--gcc/testsuite/gcc.dg/guality/param-6.c20
-rw-r--r--gcc/testsuite/gcc.target/i386/pr107304.c39
-rw-r--r--gcc/testsuite/gnat.dg/opt99.adb15
-rw-r--r--gcc/testsuite/gnat.dg/opt99_pkg1.adb10
-rw-r--r--gcc/testsuite/gnat.dg/opt99_pkg1.ads19
-rw-r--r--gcc/testsuite/gnat.dg/opt99_pkg2.ads13
16 files changed, 204 insertions, 43 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 197fa08..c4c1b70 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,39 @@
+2022-11-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * alias.cc (init_alias_analysis): Do not record sets to the hard
+ frame pointer if the frame pointer has not been eliminated.
+
+2022-11-08 H.J. Lu <hjl.tools@gmail.com>
+
+ Backported from master:
+ 2022-10-25 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/107304
+ * expr.cc (get_inner_reference): Always use TYPE_MODE for vector
+ field with vector raw mode.
+
+2022-11-07 Cui,Lili <lili.cui@intel.com>
+
+ * config/i386/driver-i386.cc (host_detect_local_cpu):
+ Move sapphirerapids out of AVX512_VP2INTERSECT.
+ * config/i386/i386.h: Remove AVX512_VP2INTERSECT from PTA_SAPPHIRERAPIDS
+ * doc/invoke.texi: Remove AVX512_VP2INTERSECT from SAPPHIRERAPIDS
+
+2022-11-05 Jonathan Wakely <jwakely@redhat.com>
+
+ Backported from master:
+ 2022-11-05 Jonathan Wakely <jwakely@redhat.com>
+
+ PR c/41041
+ * doc/cppopts.texi: Document -fwide-exec-charset defaults
+ correctly.
+
+2022-11-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * fold-const.cc (operand_compare::operand_equal_p) <COMPONENT_REF>:
+ Do not take into account operand 2.
+ (operand_compare::hash_operand) <COMPONENT_REF>: Likewise.
+
2022-11-03 Uros Bizjak <ubizjak@gmail.com>
Backported from master:
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index c96f224..9da330f 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20221104
+20221114
diff --git a/gcc/alias.cc b/gcc/alias.cc
index d54feb1..c62837d 100644
--- a/gcc/alias.cc
+++ b/gcc/alias.cc
@@ -3369,6 +3369,10 @@ memory_modified_in_insn_p (const_rtx mem, const_rtx insn)
void
init_alias_analysis (void)
{
+ const bool frame_pointer_eliminated
+ = reload_completed
+ && !frame_pointer_needed
+ && targetm.can_eliminate (FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM);
unsigned int maxreg = max_reg_num ();
int changed, pass;
int i;
@@ -3446,12 +3450,8 @@ init_alias_analysis (void)
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
if (static_reg_base_value[i]
/* Don't treat the hard frame pointer as special if we
- eliminated the frame pointer to the stack pointer instead. */
- && !(i == HARD_FRAME_POINTER_REGNUM
- && reload_completed
- && !frame_pointer_needed
- && targetm.can_eliminate (FRAME_POINTER_REGNUM,
- STACK_POINTER_REGNUM)))
+ eliminated the frame pointer to the stack pointer. */
+ && !(i == HARD_FRAME_POINTER_REGNUM && frame_pointer_eliminated))
{
new_reg_base_value[i] = static_reg_base_value[i];
bitmap_set_bit (reg_seen, i);
@@ -3467,10 +3467,15 @@ init_alias_analysis (void)
{
rtx note, set;
+ /* Treat the hard frame pointer as special unless we
+ eliminated the frame pointer to the stack pointer. */
+ if (!frame_pointer_eliminated
+ && modified_in_p (hard_frame_pointer_rtx, insn))
+ continue;
+
/* If this insn has a noalias note, process it, Otherwise,
scan for sets. A simple set will have no side effects
which could change the base value of any other register. */
-
if (GET_CODE (PATTERN (insn)) == SET
&& REG_NOTES (insn) != 0
&& find_reg_note (insn, REG_NOALIAS, NULL_RTX))
diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc
index 9e0ae0b..fcf23fd 100644
--- a/gcc/config/i386/driver-i386.cc
+++ b/gcc/config/i386/driver-i386.cc
@@ -574,15 +574,12 @@ const char *host_detect_local_cpu (int argc, const char **argv)
/* This is unknown family 0x6 CPU. */
if (has_feature (FEATURE_AVX))
{
+ /* Assume Tiger Lake */
if (has_feature (FEATURE_AVX512VP2INTERSECT))
- {
- if (has_feature (FEATURE_TSXLDTRK))
- /* Assume Sapphire Rapids. */
- cpu = "sapphirerapids";
- else
- /* Assume Tiger Lake */
- cpu = "tigerlake";
- }
+ cpu = "tigerlake";
+ /* Assume Sapphire Rapids. */
+ else if (has_feature (FEATURE_TSXLDTRK))
+ cpu = "sapphirerapids";
/* Assume Cooper Lake */
else if (has_feature (FEATURE_AVX512BF16))
cpu = "cooperlake";
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 363082b..a61c32b 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -2328,10 +2328,9 @@ constexpr wide_int_bitmask PTA_ICELAKE_SERVER = PTA_ICELAKE_CLIENT
constexpr wide_int_bitmask PTA_TIGERLAKE = PTA_ICELAKE_CLIENT | PTA_MOVDIRI
| PTA_MOVDIR64B | PTA_CLWB | PTA_AVX512VP2INTERSECT | PTA_KL | PTA_WIDEKL;
constexpr wide_int_bitmask PTA_SAPPHIRERAPIDS = PTA_ICELAKE_SERVER | PTA_MOVDIRI
- | PTA_MOVDIR64B | PTA_AVX512VP2INTERSECT | PTA_ENQCMD | PTA_CLDEMOTE
- | PTA_PTWRITE | PTA_WAITPKG | PTA_SERIALIZE | PTA_TSXLDTRK | PTA_AMX_TILE
- | PTA_AMX_INT8 | PTA_AMX_BF16 | PTA_UINTR | PTA_AVXVNNI | PTA_AVX512FP16
- | PTA_AVX512BF16;
+ | PTA_MOVDIR64B | PTA_ENQCMD | PTA_CLDEMOTE | PTA_PTWRITE | PTA_WAITPKG
+ | PTA_SERIALIZE | PTA_TSXLDTRK | PTA_AMX_TILE | PTA_AMX_INT8 | PTA_AMX_BF16
+ | PTA_UINTR | PTA_AVXVNNI | PTA_AVX512FP16 | PTA_AVX512BF16;
constexpr wide_int_bitmask PTA_KNL = PTA_BROADWELL | PTA_AVX512PF
| PTA_AVX512ER | PTA_AVX512F | PTA_AVX512CD | PTA_PREFETCHWT1;
constexpr wide_int_bitmask PTA_BONNELL = PTA_CORE2 | PTA_MOVBE;
diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi
index 75c56a3..c0a92b3 100644
--- a/gcc/doc/cppopts.texi
+++ b/gcc/doc/cppopts.texi
@@ -318,9 +318,10 @@ supported by the system's @code{iconv} library routine.
@opindex fwide-exec-charset
@cindex character set, wide execution
Set the wide execution character set, used for wide string and
-character constants. The default is UTF-32 or UTF-16, whichever
-corresponds to the width of @code{wchar_t}. As with
-@option{-fexec-charset}, @var{charset} can be any encoding supported
+character constants. The default is one of UTF-32BE, UTF-32LE, UTF-16BE,
+or UTF-16LE, whichever corresponds to the width of @code{wchar_t} and the
+big-endian or little-endian byte order being used for code generation. As
+with @option{-fexec-charset}, @var{charset} can be any encoding supported
by the system's @code{iconv} library routine; however, you will have
problems with encodings that do not fit exactly in @code{wchar_t}.
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 8bd7279..12bcaf9 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -31618,11 +31618,11 @@ Intel sapphirerapids CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
-AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
+AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
-MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
-SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16
-and AVX512BF16 instruction set support.
+MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
+UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16 and AVX512BF16
+instruction set support.
@item alderlake
Intel Alderlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
diff --git a/gcc/expr.cc b/gcc/expr.cc
index 0ce2094..08d4e31 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -7640,8 +7640,7 @@ get_inner_reference (tree exp, poly_int64_pod *pbitsize,
/* For vector fields re-check the target flags, as DECL_MODE
could have been set with different target flags than
the current function has. */
- if (mode == BLKmode
- && VECTOR_TYPE_P (TREE_TYPE (field))
+ if (VECTOR_TYPE_P (TREE_TYPE (field))
&& VECTOR_MODE_P (TYPE_MODE_RAW (TREE_TYPE (field))))
mode = TYPE_MODE (TREE_TYPE (field));
}
diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc
index 948e13a..eec4c18 100644
--- a/gcc/fold-const.cc
+++ b/gcc/fold-const.cc
@@ -3351,9 +3351,6 @@ operand_compare::operand_equal_p (const_tree arg0, const_tree arg1,
if (compare_address
&& (flags & OEP_ADDRESS_OF_SAME_FIELD) == 0)
{
- if (TREE_OPERAND (arg0, 2)
- || TREE_OPERAND (arg1, 2))
- return OP_SAME_WITH_NULL (2);
tree field0 = TREE_OPERAND (arg0, 1);
tree field1 = TREE_OPERAND (arg1, 1);
@@ -3864,17 +3861,10 @@ operand_compare::hash_operand (const_tree t, inchash::hash &hstate,
if (sflags & OEP_ADDRESS_OF)
{
hash_operand (TREE_OPERAND (t, 0), hstate, flags);
- if (TREE_OPERAND (t, 2))
- hash_operand (TREE_OPERAND (t, 2), hstate,
- flags & ~OEP_ADDRESS_OF);
- else
- {
- tree field = TREE_OPERAND (t, 1);
- hash_operand (DECL_FIELD_OFFSET (field),
- hstate, flags & ~OEP_ADDRESS_OF);
- hash_operand (DECL_FIELD_BIT_OFFSET (field),
- hstate, flags & ~OEP_ADDRESS_OF);
- }
+ hash_operand (DECL_FIELD_OFFSET (TREE_OPERAND (t, 1)),
+ hstate, flags & ~OEP_ADDRESS_OF);
+ hash_operand (DECL_FIELD_BIT_OFFSET (TREE_OPERAND (t, 1)),
+ hstate, flags & ~OEP_ADDRESS_OF);
return;
}
break;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 674b98d..2f77b93 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,21 @@
+2022-11-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.dg/guality/param-6.c: New test.
+
+2022-11-08 H.J. Lu <hjl.tools@gmail.com>
+
+ Backported from master:
+ 2022-10-25 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/107304
+ * gcc.target/i386/pr107304.c: New test.
+
+2022-11-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/opt99.adb: New test.
+ * gnat.dg/opt99_pkg1.ads, gnat.dg/opt99_pkg1.adb: New helper.
+ * gnat.dg/opt99_pkg2.ads: Likewise.
+
2022-11-03 Uros Bizjak <ubizjak@gmail.com>
Backported from master:
diff --git a/gcc/testsuite/gcc.dg/guality/param-6.c b/gcc/testsuite/gcc.dg/guality/param-6.c
new file mode 100644
index 0000000..9c4ba5c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/param-6.c
@@ -0,0 +1,20 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-g" } */
+
+void __attribute__((noipa)) bar (void *p)
+{}
+
+void __attribute__((noipa)) foo (int i)
+{
+ void *p = __builtin_alloca (i);
+
+ asm volatile ("" : : : "ebx");
+
+ bar (p); /* { dg-final { gdb-test . "i" "5" } } */
+}
+
+int main (void)
+{
+ foo (5);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr107304.c b/gcc/testsuite/gcc.target/i386/pr107304.c
new file mode 100644
index 0000000..24d6879
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr107304.c
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options "-O0 -march=tigerlake" } */
+
+#include <stdint.h>
+
+typedef union {
+ uint8_t v __attribute__((aligned(256))) __attribute__ ((vector_size(64 * sizeof(uint8_t))));
+ uint8_t i[64] __attribute__((aligned(256)));
+} stress_vec_u8_64_t;
+
+typedef struct {
+ struct {
+ stress_vec_u8_64_t s;
+ stress_vec_u8_64_t o;
+ stress_vec_u8_64_t mask1;
+ stress_vec_u8_64_t mask2;
+ } u8_64;
+} stress_vec_data_t;
+
+__attribute__((target_clones("arch=alderlake", "default")))
+void
+stress_vecshuf_u8_64(stress_vec_data_t *data)
+{
+ stress_vec_u8_64_t *__restrict s;
+ stress_vec_u8_64_t *__restrict mask1;
+ stress_vec_u8_64_t *__restrict mask2;
+ register int i;
+
+ s = &data->u8_64.s;
+ mask1 = &data->u8_64.mask1;
+ mask2 = &data->u8_64.mask2;
+
+ for (i = 0; i < 256; i++) { /* was i < 65536 */
+ stress_vec_u8_64_t tmp;
+
+ tmp.v = __builtin_shuffle(s->v, mask1->v);
+ s->v = __builtin_shuffle(tmp.v, mask2->v);
+ }
+}
diff --git a/gcc/testsuite/gnat.dg/opt99.adb b/gcc/testsuite/gnat.dg/opt99.adb
new file mode 100644
index 0000000..8805d47
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt99.adb
@@ -0,0 +1,15 @@
+-- { dg-do run }
+-- { dg-options "-O" }
+
+with Opt99_Pkg1; use Opt99_Pkg1;
+
+procedure Opt99 is
+ C : constant My_Character := (D => True, C => ' ');
+ D : Derived;
+
+begin
+ Set (D, C, C);
+ if not D.C2.D then
+ raise Program_Error;
+ end if;
+end;
diff --git a/gcc/testsuite/gnat.dg/opt99_pkg1.adb b/gcc/testsuite/gnat.dg/opt99_pkg1.adb
new file mode 100644
index 0000000..476b09c
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt99_pkg1.adb
@@ -0,0 +1,10 @@
+package body Opt99_Pkg1 is
+
+ procedure Set (D: in out Derived; C1, C2 : My_Character) is
+ begin
+ D.I := 0;
+ D.C1 := C1;
+ D.C2 := C2;
+ end;
+
+end Opt99_Pkg1;
diff --git a/gcc/testsuite/gnat.dg/opt99_pkg1.ads b/gcc/testsuite/gnat.dg/opt99_pkg1.ads
new file mode 100644
index 0000000..3e26561
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt99_pkg1.ads
@@ -0,0 +1,19 @@
+with Opt99_Pkg2;
+
+package Opt99_Pkg1 is
+
+ type My_Character (D : Boolean := False) is record
+ case D is
+ when False => null;
+ when True => C : Character;
+ end case;
+ end record;
+
+ type Derived is new Opt99_Pkg2.Root with record
+ I : Integer;
+ C1, C2 : My_Character;
+ end record;
+
+ procedure Set (D: in out Derived; C1, C2 : My_Character);
+
+end Opt99_Pkg1;
diff --git a/gcc/testsuite/gnat.dg/opt99_pkg2.ads b/gcc/testsuite/gnat.dg/opt99_pkg2.ads
new file mode 100644
index 0000000..09aaff1
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt99_pkg2.ads
@@ -0,0 +1,13 @@
+package Opt99_Pkg2 is
+
+ function Get_Max return Positive is (4);
+
+ C : constant Positive := Get_Max;
+
+ type Arr is array (1 .. C) of Integer;
+
+ type Root is tagged record
+ Data : Arr;
+ end record;
+
+end Opt99_Pkg2;