diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-08-27 15:19:26 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2019-08-27 15:19:26 +0000 |
commit | 522f3b741606e806f058efcdf6474f2cdcc56718 (patch) | |
tree | 73bbe6e4ed1d559a032261161b45b7d06167927d /gcc/testsuite/gcc.target/i386 | |
parent | bd903dd991637c9f6a7d767e1b52c45fe89d55fe (diff) | |
parent | 78b52ce61b320949dc277b5911f8dba81d1ffb40 (diff) |
svn merge -r271960:274943 svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-9-branch
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/redhat/gcc-9-branch@274959 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.target/i386')
47 files changed, 303 insertions, 79 deletions
diff --git a/gcc/testsuite/gcc.target/i386/attr-aligned-2.c b/gcc/testsuite/gcc.target/i386/attr-aligned-2.c index b99a28a8f3d..38417820201 100644 --- a/gcc/testsuite/gcc.target/i386/attr-aligned-2.c +++ b/gcc/testsuite/gcc.target/i386/attr-aligned-2.c @@ -14,8 +14,8 @@ void f4 (void); ALIGN (4) void f4 (void) { } -/* { dg-final { scan-assembler ".align 4\n\t.globl\tf4" } } */ - +/* { dg-final { scan-assembler ".align 4\n\t.globl\tf4" { target { ! *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {.align[ \t]2,0x90\n\t.globl[ \t]_f4} { target *-*-darwin* } } } */ void g (void) { } diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-pr91150.c b/gcc/testsuite/gcc.target/i386/avx512bw-pr91150.c new file mode 100644 index 00000000000..8c6862265cb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512bw-pr91150.c @@ -0,0 +1,37 @@ +/* PR target/91150 */ +/* { dg-do run } */ +/* { dg-options "-O2 -mavx512bw" } */ +/* { dg-require-effective-target avx512bw } */ + +#include "avx512bw-check.h" + +typedef unsigned char V __attribute__((vector_size (64))); + +__attribute__((noipa)) void +foo (V *x, V *y, V *z) +{ + *x = __builtin_shuffle (*y, *z, (V) { 0, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, + 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127 }); +} + +static void +avx512bw_test (void) +{ + union U { unsigned char a[64]; V v; } a, b, c; + int i; + for (i = 0; i < 64; i++) + { + b.a[i] = i + 1; + c.a[i] = i + 65; + } + foo (&a.v, &b.v, &c.v); + for (i = 0; i < 64; i++) + if (a.a[i] != (i < 16 ? i + 1 : i + 65)) + __builtin_abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-pr91157.c b/gcc/testsuite/gcc.target/i386/avx512bw-pr91157.c new file mode 100644 index 00000000000..602d922eda9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512bw-pr91157.c @@ -0,0 +1,6 @@ +/* PR tree-optimization/91157 */ +/* { dg-do run { target { avx512bw && lp64 } } } */ +/* { dg-options "-O2 -mavx512bw -fexceptions -fnon-call-exceptions -fsignaling-nans" } */ + +#define AVX512BW +#include "avx512f-pr91157.c" diff --git a/gcc/testsuite/gcc.target/i386/avx512dq-pr90991-1.c b/gcc/testsuite/gcc.target/i386/avx512dq-pr90991-1.c new file mode 100644 index 00000000000..6c968126b7d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512dq-pr90991-1.c @@ -0,0 +1,47 @@ +/* PR target/90991 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512dq -masm=att" } */ +/* { dg-final { scan-assembler-times "vmovaps\[ \t]\+\\(\[^\n\r]*\\), %xmm0" 1 } } */ +/* { dg-final { scan-assembler-times "vmovapd\[ \t]\+\\(\[^\n\r]*\\), %xmm0" 1 } } */ +/* { dg-final { scan-assembler-times "vmovdqa\[ \t]\+\\(\[^\n\r]*\\), %xmm0" 1 } } */ +/* { dg-final { scan-assembler-times "vmovups\[ \t]\+\\(\[^\n\r]*\\), %xmm0" 1 } } */ +/* { dg-final { scan-assembler-times "vmovupd\[ \t]\+\\(\[^\n\r]*\\), %xmm0" 1 } } */ +/* { dg-final { scan-assembler-times "vmovdqu\[ \t]\+\\(\[^\n\r]*\\), %xmm0" 1 } } */ + +#include <x86intrin.h> + +__m512 +f1 (void *a) +{ + return _mm512_insertf32x4 (_mm512_set1_ps (0.0f), _mm_load_ps (a), 0); +} + +__m512d +f2 (void *a) +{ + return _mm512_insertf64x2 (_mm512_set1_pd (0.0), _mm_load_pd (a), 0); +} + +__m512i +f3 (void *a) +{ + return _mm512_inserti32x4 (_mm512_set1_epi32 (0), _mm_load_si128 (a), 0); +} + +__m512 +f4 (void *a) +{ + return _mm512_insertf32x4 (_mm512_set1_ps (0.0f), _mm_loadu_ps (a), 0); +} + +__m512d +f5 (void *a) +{ + return _mm512_insertf64x2 (_mm512_set1_pd (0.0), _mm_loadu_pd (a), 0); +} + +__m512i +f6 (void *a) +{ + return _mm512_inserti32x4 (_mm512_set1_epi32 (0), _mm_loadu_si128 (a), 0); +} diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr91157.c b/gcc/testsuite/gcc.target/i386/avx512f-pr91157.c new file mode 100644 index 00000000000..c7d0d8b4030 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512f-pr91157.c @@ -0,0 +1,29 @@ +/* PR tree-optimization/91157 */ +/* { dg-do run { target { avx512f && lp64 } } } */ +/* { dg-options "-O2 -mavx512f -fexceptions -fnon-call-exceptions -fsignaling-nans" } */ + +#include "avx512f-helper.h" + +typedef long double V __attribute__ ((vector_size (4 * sizeof (long double)))); +typedef __int128 W __attribute__ ((vector_size (4 * sizeof (__int128)))); + +__attribute__((noipa)) W +foo (V x) +{ + return x == 0; +} + +static void +test_512 (void) +{ + V a = { 5.0L, 0.0L, -0.0L, -17.0L }; + V b = { -0.0L, 16.0L, 0.0L, 18.0L }; + V c = { 6.0L, 7.0L, 8.0L, 0.0L }; + W ar = foo (a); + W br = foo (b); + W cr = foo (c); + if (ar[0] != 0 || ar[1] != -1 || ar[2] != -1 || ar[3] != 0 + || br[0] != -1 || br[1] != 0 || br[2] != -1 || br[3] != 0 + || cr[0] != 0 || cr[1] != 0 || cr[2] != 0 || cr[3] != -1) + __builtin_abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/falign-functions-2.c b/gcc/testsuite/gcc.target/i386/falign-functions-2.c index 26d505e3bea..2672c87262f 100644 --- a/gcc/testsuite/gcc.target/i386/falign-functions-2.c +++ b/gcc/testsuite/gcc.target/i386/falign-functions-2.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -falign-functions=64:8" } */ +/* { dg-skip-if "SUBALIGN_LOG not set for Darwin" { *-*-darwin* } } */ void a (void) diff --git a/gcc/testsuite/gcc.target/i386/falign-functions-3.c b/gcc/testsuite/gcc.target/i386/falign-functions-3.c index f4a6acee0c8..86423c4e4a9 100644 --- a/gcc/testsuite/gcc.target/i386/falign-functions-3.c +++ b/gcc/testsuite/gcc.target/i386/falign-functions-3.c @@ -9,15 +9,16 @@ ALIGN (4) void f4 (void) { } -/* { dg-final { scan-assembler ".align 4\n\t.globl\tf4" } } */ - +/* { dg-final { scan-assembler ".align 4\n\t.globl\tf4" { target { ! *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {.align 2,0x90\n\t.globl[ \t]_f4} { target *-*-darwin* } } } */ void f32 (void) { } -/* { dg-final { scan-assembler ".p2align 5\n\t.globl\tf32" } } */ +/* { dg-final { scan-assembler {.p2align 5\n\t.globl[ \t]_?f32} } } */ ALIGN (64) void f64 (void) { } -/* { dg-final { scan-assembler ".align 64\n\t.globl\tf64" } } */ +/* { dg-final { scan-assembler ".align 64\n\t.globl\tf64" { target { ! *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {.align 6,0x90\n\t.globl[ \t]_f64} { target *-*-darwin* } } } */ diff --git a/gcc/testsuite/gcc.target/i386/fuse-caller-save-rec.c b/gcc/testsuite/gcc.target/i386/fuse-caller-save-rec.c index 7abcf91e26d..e8d4efb260e 100644 --- a/gcc/testsuite/gcc.target/i386/fuse-caller-save-rec.c +++ b/gcc/testsuite/gcc.target/i386/fuse-caller-save-rec.c @@ -18,14 +18,12 @@ foo (int y) return y + bar (y); } -/* For !nonpic && ia32 xfails, see PR64895. */ - /* Check that no registers are saved/restored. */ -/* { dg-final { scan-assembler-not "push" { xfail { { ! nonpic } && ia32 } } } } */ -/* { dg-final { scan-assembler-not "pop" { xfail { { ! nonpic } && ia32 } } } } */ +/* { dg-final { scan-assembler-not "push" } } */ +/* { dg-final { scan-assembler-not "pop" } } */ /* Check that addition uses dx. */ -/* { dg-final { scan-assembler-times "addl\t%\[re\]?dx, %\[re\]?ax" 1 { xfail { { ! nonpic } && ia32 } } } } */ +/* { dg-final { scan-assembler-times "addl\t%\[re\]?dx, %\[re\]?ax" 1 } } */ /* Verify that bar is self-recursive. */ /* { dg-final { scan-assembler-times "call\t_?bar" 2 } } */ diff --git a/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c b/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c index c2d0544d665..4deff93c1e8 100644 --- a/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c +++ b/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c @@ -15,13 +15,19 @@ foo (v2df y) return y + bar (y); } -/* For !nonpic && ia32 xfails, see PR64895. */ - /* Check presence of all insns on xmm registers. These checks are expected to pass with both -fipa-ra and -fno-ipa-ra. */ -/* { dg-final { scan-assembler-times "addpd\t\\.?LC0.*, %xmm0" 1 } } */ -/* { dg-final { scan-assembler-times "addpd\t%xmm1, %xmm0" 1 { xfail { { ! nonpic } && ia32 } } } } */ -/* { dg-final { scan-assembler-times "movapd\t%xmm0, %xmm1" 1 { xfail { { ! nonpic } && ia32 } } } } */ + +/* Darwin local constant symbol is "lC0", ELF targets ".LC0" */ +/* { dg-final { scan-assembler-times {addpd\t\.?[Ll]C0.*, %xmm0} 1 { target { { ! ia32 } || nonpic } } } } */ +/* { dg-final { scan-assembler-times {movapd\t\.?[Ll]C0.*, %xmm1} 1 { target { ia32 && { ! nonpic } } } } } */ + +/* We happen to get this for both cases, but in different positions. */ +/* { dg-final { scan-assembler-times "addpd\t%xmm1, %xmm0" 1 } } */ + +/* { dg-final { scan-assembler-times "movapd\t%xmm0, %xmm1" 1 { target { { ! ia32 } || nonpic } } } } */ +/* { dg-final { scan-assembler-times "movapd\t%xmm0, %xmm2" 1 { target { ia32 && { ! nonpic } } } } } */ +/* { dg-final { scan-assembler-times "addpd\t%xmm2, %xmm0" 1 { target { ia32 && { ! nonpic } } } } } */ /* Check absence of save/restore of xmm1 register. */ /* { dg-final { scan-assembler-not "movaps\t%xmm1, \\(%\[re\]?sp\\)" } } */ diff --git a/gcc/testsuite/gcc.target/i386/fuse-caller-save.c b/gcc/testsuite/gcc.target/i386/fuse-caller-save.c index 4b8e68d90f5..c0e8bf443d0 100644 --- a/gcc/testsuite/gcc.target/i386/fuse-caller-save.c +++ b/gcc/testsuite/gcc.target/i386/fuse-caller-save.c @@ -16,11 +16,9 @@ foo (int y) return y + bar (y); } -/* For !nonpic && ia32 xfails, see PR64895. */ - /* Check that no registers are saved/restored. */ -/* { dg-final { scan-assembler-not "push" { xfail { { ! nonpic } && ia32 } } } } */ -/* { dg-final { scan-assembler-not "pop" { xfail { { ! nonpic } && ia32 } } } } */ +/* { dg-final { scan-assembler-not "push" } } */ +/* { dg-final { scan-assembler-not "pop" } } */ /* PR61605. If the first argument register and the return register differ, then bar leaves the first argument register intact. That means in foo that the @@ -31,4 +29,4 @@ foo (int y) /* { dg-final { scan-assembler-not "movl" { target { ! ia32 } } } } */ /* Check that addition uses di (in case of no copy) or dx (in case of copy). */ -/* { dg-final { scan-assembler-times "addl\t%\[re\]?d\[ix\], %\[re\]?ax" 1 { xfail { { ! nonpic } && ia32 } } } } */ +/* { dg-final { scan-assembler-times "addl\t%\[re\]?d\[ix\], %\[re\]?ax" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/memcpy-strategy-3.c b/gcc/testsuite/gcc.target/i386/memcpy-strategy-3.c index ddd1ef7c0b2..11687e8c9b5 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-strategy-3.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-strategy-3.c @@ -1,6 +1,9 @@ /* { dg-do compile } */ /* { dg-options "-O2 -march=atom -mmemcpy-strategy=vector_loop:2000:align,libcall:-1:align" } */ -/* { dg-final { scan-assembler-times "memcpy" 2 } } */ +/* On ELF platforms, one hit comes from the .file directive. */ +/* { dg-final { scan-assembler-times "memcpy" 2 { target { ! *-*-darwin* } } } } */ +/* But not on Darwin, which doesn't have a .file directive by default. */ +/* { dg-final { scan-assembler-times "_memcpy" 1 { target *-*-darwin* } } } */ char a[2048]; char b[2048]; diff --git a/gcc/testsuite/gcc.target/i386/memset-strategy-1.c b/gcc/testsuite/gcc.target/i386/memset-strategy-1.c index d1b97c5df10..b4b8e2cfa6f 100644 --- a/gcc/testsuite/gcc.target/i386/memset-strategy-1.c +++ b/gcc/testsuite/gcc.target/i386/memset-strategy-1.c @@ -1,10 +1,12 @@ /* { dg-do compile } */ /* { dg-options "-O2 -march=atom -mmemset-strategy=libcall:-1:align" } */ -/* { dg-final { scan-assembler-times "memset" 2 } } */ +/* On ELF platforms, one hit comes from the .file directive. */ +/* { dg-final { scan-assembler-times "memset" 2 { target { ! *-*-darwin* } } } } */ +/* But not on Darwin, which doesn't have a .file directive by default. */ +/* { dg-final { scan-assembler-times "_memset" 1 { target *-*-darwin* } } } */ char a[2048]; void t (void) { __builtin_memset (a, 1, 2048); } - diff --git a/gcc/testsuite/gcc.target/i386/pconfig-1.c b/gcc/testsuite/gcc.target/i386/pconfig-1.c index a3fc4f411fe..40b4c0c1272 100644 --- a/gcc/testsuite/gcc.target/i386/pconfig-1.c +++ b/gcc/testsuite/gcc.target/i386/pconfig-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mpconfig" } */ -/* { dg-final { scan-assembler-times "pconfig" 5 } } */ +/* { dg-final { scan-assembler-times {\tpconfig} 2 } } */ #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/pr18041-1.c b/gcc/testsuite/gcc.target/i386/pr18041-1.c index 24da41a02ec..dafe5a82d33 100644 --- a/gcc/testsuite/gcc.target/i386/pr18041-1.c +++ b/gcc/testsuite/gcc.target/i386/pr18041-1.c @@ -9,5 +9,5 @@ foo (struct B *b) b->bit0 = b->bit0 | b->bit1; } -/* { dg-final { scan-assembler-times "and" 1 } } */ -/* { dg-final { scan-assembler-times "or" 1 } } */ +/* { dg-final { scan-assembler-times {\tand[l|q]} 1 } } */ +/* { dg-final { scan-assembler-times {\tor[l|q]} 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr18041-2.c b/gcc/testsuite/gcc.target/i386/pr18041-2.c index 00ebd2ae36d..1d7748bccc4 100644 --- a/gcc/testsuite/gcc.target/i386/pr18041-2.c +++ b/gcc/testsuite/gcc.target/i386/pr18041-2.c @@ -10,5 +10,5 @@ bar (struct B *b, int x) } /* This fails to combine in 32bit mode but not for x32. */ -/* { dg-final { scan-assembler-times "and" 1 { xfail { { ! x32 } && ilp32 } } } } */ -/* { dg-final { scan-assembler-times "or" 1 { xfail { { ! x32 } && ilp32 } } } } */ +/* { dg-final { scan-assembler-times {\tand[lq]} 1 { xfail { { ! x32 } && ilp32 } } } } */ +/* { dg-final { scan-assembler-times {\tor} 1 { xfail { { ! x32 } && ilp32 } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr22076.c b/gcc/testsuite/gcc.target/i386/pr22076.c index 6c1620b4a3b..d31ffa584b4 100644 --- a/gcc/testsuite/gcc.target/i386/pr22076.c +++ b/gcc/testsuite/gcc.target/i386/pr22076.c @@ -1,6 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fomit-frame-pointer -flax-vector-conversions -mmmx" } */ /* { dg-additional-options "-mno-vect8-ret-in-mem" { target *-*-vxworks* } } */ +/* { dg-additional-options "-fno-common" { target *-*-darwin* } } */ +/* { dg-additional-options "-mdynamic-no-pic" { target { ia32 && *-*-darwin* } } } */ #include <mmintrin.h> diff --git a/gcc/testsuite/gcc.target/i386/pr24414.c b/gcc/testsuite/gcc.target/i386/pr24414.c index bd12f0c8492..0acaa001a5c 100644 --- a/gcc/testsuite/gcc.target/i386/pr24414.c +++ b/gcc/testsuite/gcc.target/i386/pr24414.c @@ -1,5 +1,6 @@ /* { dg-do run } */ /* { dg-options "-O2" } */ +/* { dg-skip-if "asm insert mismatches ABI for Darwin" { *-*-darwin* } } */ int test; int diff --git a/gcc/testsuite/gcc.target/i386/pr32219-1.c b/gcc/testsuite/gcc.target/i386/pr32219-1.c index bb28f9f0f58..0fcb138695b 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-1.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-1.c @@ -12,7 +12,11 @@ foo () return xxx; } -/* { dg-final { scan-assembler "movl\[ \t\]xxx\\(%rip\\), %eax" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-not "xxx@GOTPCREL" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %eax" { target ia32 } } } */ -/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %eax" { target ia32 } } } */ +/* { dg-final { scan-assembler {movl[ \t]_?xxx\(%rip\),[ \t]%eax} { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-not "_?xxx@GOTPCREL" { target { ! ia32 } } } } */ + +/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler-not "movl\[ \t\]_?xxx@GOT\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ + +/* For Darwin, we default to PIC - but that's needed for Darwin's PIE. */ +/* { dg-final { scan-assembler {movl[ \t]_xxx-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-2.c b/gcc/testsuite/gcc.target/i386/pr32219-2.c index b30862d2488..cb587db47aa 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-2.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-2.c @@ -12,6 +12,13 @@ foo () } /* { dg-final { scan-assembler-not "movl\[ \t\]xxx\\(%rip\\), %" { target { ! ia32 } } } } */ +/* For Darwin m64 we are always PIC, but common symbols are indirected, which happens to + match the general "ELF" case. */ /* { dg-final { scan-assembler "xxx@GOTPCREL" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %" { target ia32 } } } */ -/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target ia32 } } } */ + +/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ + +/* Darwin m32 defaults to PIC but common symbols need to be indirected. */ +/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ + diff --git a/gcc/testsuite/gcc.target/i386/pr32219-3.c b/gcc/testsuite/gcc.target/i386/pr32219-3.c index 657fb7831f0..f9cfca7d72c 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-3.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-3.c @@ -12,7 +12,16 @@ foo () return xxx; } -/* { dg-final { scan-assembler "movl\[ \t\]xxx\\(%rip\\), %eax" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-not "xxx@GOTPCREL" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %eax" { target ia32 } } } */ -/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %eax" { target ia32 } } } */ +/* { dg-final { scan-assembler {movl[ \t]xxx\(%rip\),[ \t]%eax} { target { { ! ia32 } && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler-not "xxx@GOTPCREL" { target { { ! ia32 } && { ! *-*-darwin* } } } } } */ + +/* For Darwin m64, code is always PIC and we need to indirect through the GOT to allow + weak symbols to be interposed. The dynamic loader knows how to apply PIE to this. */ +/* { dg-final { scan-assembler {movq[ \t]_xxx@GOTPCREL\(%rip\),[ \t]%rax} { target { { ! ia32 } && *-*-darwin* } } } } */ + +/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ + +/* For Darwin, we need PIC to allow PIE, but also we must indirect weak symbols so that + they can be indirected. Again, dyld knows how to deal with this. */ +/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-4.c b/gcc/testsuite/gcc.target/i386/pr32219-4.c index ff62fa4c051..0ac0674ae17 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-4.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-4.c @@ -13,6 +13,12 @@ foo () } /* { dg-final { scan-assembler-not "movl\[ \t\]xxx\\(%rip\\), %" { target { ! ia32 } } } } */ +/* Darwin is always PIC for PIE so no change, weak symbols need to be indirect and this + happens to match the ELF case. */ /* { dg-final { scan-assembler "xxx@GOTPCREL" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %" { target ia32 } } } */ -/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target ia32 } } } */ + +/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ + +/* Darwin m32 equivalent (indirect and PIC). */ +/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-5.c b/gcc/testsuite/gcc.target/i386/pr32219-5.c index e8844c85ff0..11496dc8608 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-5.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-5.c @@ -11,7 +11,11 @@ foo () return xxx; } -/* { dg-final { scan-assembler "movl\[ \t\]xxx\\(%rip\\), %eax" { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler "movl\[ \t\]_?xxx\\(%rip\\), %eax" { target { ! ia32 } } } } */ /* { dg-final { scan-assembler-not "xxx@GOTPCREL" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %eax" { target ia32 } } } */ -/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %eax" { target ia32 } } } */ + +/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ + +/* For Darwin m32, we need PIC (the default) to allow PIE. */ +/* { dg-final { scan-assembler {movl[ \t]_xxx-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-6.c b/gcc/testsuite/gcc.target/i386/pr32219-6.c index 24e55ae0146..ff41ebd399e 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-6.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-6.c @@ -11,7 +11,14 @@ foo () return xxx; } -/* { dg-final { scan-assembler-not "movl\[ \t\]xxx\\(%rip\\), %" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler "xxx@GOTPCREL" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %" { target ia32 } } } */ -/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target ia32 } } } */ +/* { dg-final { scan-assembler-not "movl\[ \t\]xxx\\(%rip\\), %" { target { { ! ia32 } && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler "xxx@GOTPCREL" { target { { ! ia32 } && { ! *-*-darwin* } } } } } */ + +/* Darwin m64 is always PIC, and the dynamic linker doesn't need an indirection. */ +/* { dg-final { scan-assembler {movl[ \t]_xxx\(%rip\),[ \t]%eax} { target { { ! ia32 } && *-*-darwin* } } } } */ + +/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ + +/* Darwin m32 defaults to PIC, so no change. */ +/* { dg-final { scan-assembler {movl[ \t]_xxx-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-7.c b/gcc/testsuite/gcc.target/i386/pr32219-7.c index 9273d3ed9bb..469e9e38b07 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-7.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-7.c @@ -12,7 +12,15 @@ foo () return xxx; } -/* { dg-final { scan-assembler "movl\[ \t\]xxx\\(%rip\\), %eax" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-not "xxx@GOTPCREL" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %eax" { target ia32 } } } */ -/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %eax" { target ia32 } } } */ +/* { dg-final { scan-assembler "movl\[ \t\]xxx\\(%rip\\), %eax" { target { { ! ia32 } && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler-not "xxx@GOTPCREL" { target { { ! ia32 } && { ! *-*-darwin* } } } } } */ + +/* For Darwin m64, code is always PIC but we need to indirect through the GOT to allow + weak symbols to be interposed. The dynamic loader knows how to apply PIE to this. */ +/* { dg-final { scan-assembler {movq[ \t]_xxx@GOTPCREL\(%rip\),[ \t]%rax} { target { { ! ia32 } && *-*-darwin* } } } } */ + +/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ + +/* Darwin m32 equivalent (indirect and PIC). */ +/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-8.c b/gcc/testsuite/gcc.target/i386/pr32219-8.c index c44919509de..75eb287fc59 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-8.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-8.c @@ -13,6 +13,12 @@ foo () } /* { dg-final { scan-assembler-not "movl\[ \t\]xxx\\(%rip\\), %" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler "xxx@GOTPCREL" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %" { target ia32 } } } */ -/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target ia32 } } } */ +/* Darwin is always PIC so no change, weak symbols needs to be indirect and this + happens to match the ELF case. */ +/* { dg-final { scan-assembler "_?xxx@GOTPCREL" { target { ! ia32 } } } } */ + +/* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOTOFF\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ +/* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ + +/* Darwin m32 default to PIC but needs indirection for the weak symbol. */ +/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr39013-1.c b/gcc/testsuite/gcc.target/i386/pr39013-1.c index ac22746772b..78b17028a11 100644 --- a/gcc/testsuite/gcc.target/i386/pr39013-1.c +++ b/gcc/testsuite/gcc.target/i386/pr39013-1.c @@ -12,5 +12,9 @@ main (void) return foo () + bar (); } -/* { dg-final { scan-assembler "foo@PLT" } } */ -/* { dg-final { scan-assembler "bar@PLT" } } */ +/* { dg-final { scan-assembler "foo@PLT" { target { ! *-*-darwin* } } } } */ +/* { dg-final { scan-assembler "bar@PLT" { target { ! *-*-darwin* } } } } */ + +/* Darwin's dynamic linker does PIE without indirection. */ +/* { dg-final { scan-assembler {call[ \t]_foo} { target *-*-darwin* } } } */ +/* { dg-final { scan-assembler {call[ \t]_bar} { target *-*-darwin* } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr39013-2.c b/gcc/testsuite/gcc.target/i386/pr39013-2.c index 3040d81a44d..f4412909bfe 100644 --- a/gcc/testsuite/gcc.target/i386/pr39013-2.c +++ b/gcc/testsuite/gcc.target/i386/pr39013-2.c @@ -12,5 +12,9 @@ main (void) return foo () + bar (); } -/* { dg-final { scan-assembler "foo@PLT" } } */ -/* { dg-final { scan-assembler "bar@PLT" } } */ +/* { dg-final { scan-assembler "foo@PLT" { target { ! *-*-darwin* } } } } */ +/* { dg-final { scan-assembler "bar@PLT" { target { ! *-*-darwin* } } } } */ + +/* Darwin's dynamic linker does PIE without indirection. */ +/* { dg-final { scan-assembler {call[ \t]_foo} { target *-*-darwin* } } } */ +/* { dg-final { scan-assembler {call[ \t]_bar} { target *-*-darwin* } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr49866.c b/gcc/testsuite/gcc.target/i386/pr49866.c index 622c8f65625..7c80f13ca3a 100644 --- a/gcc/testsuite/gcc.target/i386/pr49866.c +++ b/gcc/testsuite/gcc.target/i386/pr49866.c @@ -1,5 +1,6 @@ /* PR target/49866 */ /* { dg-do assemble { target lp64 } } */ +/* { dg-xfail-if "PR90698" { *-*-darwin* } } */ /* { dg-options "-O2 -mcmodel=large" } */ void fn (void *, int, int); diff --git a/gcc/testsuite/gcc.target/i386/pr59874-3.c b/gcc/testsuite/gcc.target/i386/pr59874-3.c index ec55a12e2a0..0332f04a977 100644 --- a/gcc/testsuite/gcc.target/i386/pr59874-3.c +++ b/gcc/testsuite/gcc.target/i386/pr59874-3.c @@ -1,7 +1,8 @@ /* PR target/59874 */ /* { dg-do compile } */ /* { dg-options "-O2 -mpopcnt -masm=att" } */ -/* { dg-final { scan-assembler "popcntw" } } */ +/* { dg-final { scan-assembler "\tpopcntw" { target { ! *-*-darwin* } } } } */ +/* { dg-final { scan-assembler "\tpopcnt" { target *-*-darwin* } } } */ unsigned int foo (unsigned short x) diff --git a/gcc/testsuite/gcc.target/i386/pr61599-1.c b/gcc/testsuite/gcc.target/i386/pr61599-1.c index 71b1c2f02dd..52fea393d60 100644 --- a/gcc/testsuite/gcc.target/i386/pr61599-1.c +++ b/gcc/testsuite/gcc.target/i386/pr61599-1.c @@ -1,5 +1,6 @@ /* PR target/61599 */ /* { dg-do run { target lp64 } } */ +/* { dg-skip-if "PR90698" { *-*-darwin* } } */ /* { dg-additional-sources pr61599-2.c } */ /* { dg-options "-mcmodel=medium -fdata-sections" } */ diff --git a/gcc/testsuite/gcc.target/i386/pr63538.c b/gcc/testsuite/gcc.target/i386/pr63538.c index 7b979c35d81..87d5d3e040f 100644 --- a/gcc/testsuite/gcc.target/i386/pr63538.c +++ b/gcc/testsuite/gcc.target/i386/pr63538.c @@ -9,5 +9,5 @@ char *foo () { return str; } - -/* { dg-final { scan-assembler "movabs" } } */ +/* See PR90698 re. Darwin xfail. */ +/* { dg-final { scan-assembler "movabs" { xfail { *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr64317.c b/gcc/testsuite/gcc.target/i386/pr64317.c index 9e13da63885..3fbdccd36f2 100644 --- a/gcc/testsuite/gcc.target/i386/pr64317.c +++ b/gcc/testsuite/gcc.target/i386/pr64317.c @@ -2,9 +2,14 @@ /* { dg-require-effective-target ia32 } */ /* { dg-require-effective-target pie } */ /* { dg-options "-O2 -fpie" } */ -/* { dg-final { scan-assembler "addl\[ \\t\]+\[$\]_GLOBAL_OFFSET_TABLE_, %ebx" } } */ -/* { dg-final { scan-assembler "movl\[ \\t\]+c@GOTOFF\[(\]%ebx\[)\]" } } */ -/* { dg-final { scan-assembler-not "movl\[ \\t\]+\[0-9]+\[(\]%esp\[)\], %ebx" } } */ +/* { dg-final { scan-assembler "addl\[ \\t\]+\[$\]_GLOBAL_OFFSET_TABLE_, %ebx" { target { ! *-*-darwin* } } } } */ +/* { dg-final { scan-assembler "movl\[ \\t\]+c@GOTOFF\[(\]%ebx\[)\]" { target { ! *-*-darwin* } } } } */ +/* { dg-final { scan-assembler-not "movl\[ \\t\]+\[0-9]+\[(\]%esp\[)\], %ebx" { target { ! *-*-darwin* } } } } */ + +/* Check PIC access to c and t1 on Darwin (PIC is default, needed for PIE). */ +/* { dg-final { scan-assembler {_c-L1\$pb\(%} { target *-*-darwin* } } } */ +/* { dg-final { scan-assembler {_t1.[0-9]+-L1\$pb\(%} { target *-*-darwin* } } } */ + long c = 1; int bar(); diff --git a/gcc/testsuite/gcc.target/i386/pr66819-3.c b/gcc/testsuite/gcc.target/i386/pr66819-3.c index 3bc5a3471e6..76e3726b38a 100644 --- a/gcc/testsuite/gcc.target/i386/pr66819-3.c +++ b/gcc/testsuite/gcc.target/i386/pr66819-3.c @@ -1,6 +1,6 @@ /* { dg-do compile { target ia32 } } */ /* { dg-options "-O2 -mregparm=3" } */ -/* { dg-final { scan-assembler-not "call" } } */ +/* { dg-final { scan-assembler-not {call[ \t]+_?bar} } } */ void (*bar)(int, int); diff --git a/gcc/testsuite/gcc.target/i386/pr66819-4.c b/gcc/testsuite/gcc.target/i386/pr66819-4.c index 18b2ccf8120..143360d0de3 100644 --- a/gcc/testsuite/gcc.target/i386/pr66819-4.c +++ b/gcc/testsuite/gcc.target/i386/pr66819-4.c @@ -1,6 +1,6 @@ /* { dg-do compile { target ia32 } } */ /* { dg-options "-O2 -mregparm=3" } */ -/* { dg-final { scan-assembler-not "call" } } */ +/* { dg-final { scan-assembler-not {call[ \t]+_?bar} } } */ #include <stdarg.h> diff --git a/gcc/testsuite/gcc.target/i386/pr67985-2.c b/gcc/testsuite/gcc.target/i386/pr67985-2.c index 9c7a25ad177..a45815af66e 100644 --- a/gcc/testsuite/gcc.target/i386/pr67985-2.c +++ b/gcc/testsuite/gcc.target/i386/pr67985-2.c @@ -10,4 +10,4 @@ foo (float x, float y) /* { dg-final { scan-assembler-not "mulss" } } */ /* { dg-final { scan-assembler-not "movl\[ \t\].*, %eax" } } */ -/* { dg-final { scan-assembler "call\[ \t\]__mulsf3" } } */ +/* { dg-final { scan-assembler "call\[ \t\]_?__mulsf3" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr70738-7.c b/gcc/testsuite/gcc.target/i386/pr70738-7.c index 2e5b49f619d..ee9dfbfb35f 100644 --- a/gcc/testsuite/gcc.target/i386/pr70738-7.c +++ b/gcc/testsuite/gcc.target/i386/pr70738-7.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target ia32 } } */ +/* { dg-do compile { target { ia32 && { ! *-*-darwin* } } } } */ /* { dg-options "-msse2 -mgeneral-regs-only" } */ extern float a, b, c; diff --git a/gcc/testsuite/gcc.target/i386/pr77881.c b/gcc/testsuite/gcc.target/i386/pr77881.c index 80d143f2bc5..6803341568f 100644 --- a/gcc/testsuite/gcc.target/i386/pr77881.c +++ b/gcc/testsuite/gcc.target/i386/pr77881.c @@ -8,5 +8,5 @@ foo (long long int a, long long int a2, int b) if (a < 0 || b) baz (); } -/* { dg-final { scan-assembler "js\[ \t\]\.L" } } */ -/* { dg-final { scan-assembler "jne\[ \t\]\.L" } } */ +/* { dg-final { scan-assembler "js\[ \t\]\.?L" } } */ +/* { dg-final { scan-assembler "jne\[ \t\]\.?L" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr81563.c b/gcc/testsuite/gcc.target/i386/pr81563.c index ebfd583daf5..f0efcf91340 100644 --- a/gcc/testsuite/gcc.target/i386/pr81563.c +++ b/gcc/testsuite/gcc.target/i386/pr81563.c @@ -10,5 +10,4 @@ fn1 (long long int x) return x; } -/* { dg-final { scan-assembler-times "movl\[\\t \]*-8\\(%ebp\\),\[\\t \]*%esi" 1 } } */ -/* { dg-final { scan-assembler-times "movl\[\\t \]*-4\\(%ebp\\),\[\\t \]*%edi" 1 } } */ +/* { dg-final { scan-assembler-not "movl\[ \\t\]+\[0-9]*\\(%esp\\)" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82659-3.c b/gcc/testsuite/gcc.target/i386/pr82659-3.c index 3bb83e309e7..a2d97d9b70c 100644 --- a/gcc/testsuite/gcc.target/i386/pr82659-3.c +++ b/gcc/testsuite/gcc.target/i386/pr82659-3.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-alias "" } */ /* { dg-options "-O2 -fcf-protection" } */ /* { dg-final { scan-assembler-times {\mendbr} 2 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82662.c b/gcc/testsuite/gcc.target/i386/pr82662.c index 8a9332b5c5b..ec08edc9824 100644 --- a/gcc/testsuite/gcc.target/i386/pr82662.c +++ b/gcc/testsuite/gcc.target/i386/pr82662.c @@ -23,4 +23,4 @@ int f9 (S x, S y) { return x >= y; } int f10 (S x, S y) { return x < y; } int f11 (S x, S y) { return x <= y; } -/* { dg-final { scan-assembler-times {\mset} 12 } } */ +/* { dg-final { scan-assembler-times {\tset} 12 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr86257.c b/gcc/testsuite/gcc.target/i386/pr86257.c index 07fbba92d65..bc758c24d0c 100644 --- a/gcc/testsuite/gcc.target/i386/pr86257.c +++ b/gcc/testsuite/gcc.target/i386/pr86257.c @@ -1,6 +1,6 @@ /* { dg-require-effective-target lp64 } */ /* { dg-require-effective-target fpic } */ -/* { dg-require-effective-target tls } */ +/* { dg-require-effective-target tls_native } */ /* { dg-options "-g -fPIC -mtls-dialect=gnu" } */ __thread int i; diff --git a/gcc/testsuite/gcc.target/i386/pr90899.c b/gcc/testsuite/gcc.target/i386/pr90899.c new file mode 100644 index 00000000000..e0e2d5ac6bb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr90899.c @@ -0,0 +1,6 @@ +/* PR middle-end/90899 */ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ + +__attribute__ ((target_clones ("default", "arch=slm"))) static int f () { return 0; } +__attribute__ ((alias ("f"))) __typeof (f) g; diff --git a/gcc/testsuite/gcc.target/i386/pr91131.c b/gcc/testsuite/gcc.target/i386/pr91131.c new file mode 100644 index 00000000000..85008ff8a8b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr91131.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O" } */ + +struct Reg_T { + unsigned int a : 3; + unsigned int b : 1; + unsigned int c : 4; +}; + +volatile struct Reg_T Reg_A; + +int +main () +{ + Reg_A = (struct Reg_T){ .a = 0, .b = 0, .c = 0 }; + return 0; +} + +/* { dg-final { scan-assembler-times "mov\[^\r\n\]*Reg_A" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/ptwrite2.c b/gcc/testsuite/gcc.target/i386/ptwrite2.c index bd144fc0779..be6b23eb838 100644 --- a/gcc/testsuite/gcc.target/i386/ptwrite2.c +++ b/gcc/testsuite/gcc.target/i386/ptwrite2.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mptwrite " } */ -/* { dg-final { scan-assembler "ptwrite\[^\n\r\]+r" } } */ -/* { dg-final { scan-assembler "ptwrite\[^\n\r\]+e" } } */ +/* { dg-final { scan-assembler {ptwrite[^\n\r]+%eax} } } */ +/* { dg-final { scan-assembler {ptwrite[^\n\r]+%rax} { target lp64 } } } */ #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/stack-prot-sym.c b/gcc/testsuite/gcc.target/i386/stack-prot-sym.c index 7f63424c55f..dcd7cbd38be 100644 --- a/gcc/testsuite/gcc.target/i386/stack-prot-sym.c +++ b/gcc/testsuite/gcc.target/i386/stack-prot-sym.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-effective-target tls_native } */ /* { dg-options "-O2 -fstack-protector-all -mstack-protector-guard=tls -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=my_guard" } */ void f(void) { } diff --git a/gcc/testsuite/gcc.target/i386/wbinvd-1.c b/gcc/testsuite/gcc.target/i386/wbinvd-1.c index 7854cc22679..9290d9b1945 100644 --- a/gcc/testsuite/gcc.target/i386/wbinvd-1.c +++ b/gcc/testsuite/gcc.target/i386/wbinvd-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ -/* { dg-final { scan-assembler-times "wbinvd" 2 } } */ +/* { dg-final { scan-assembler-times {\twbinvd} 1 } } */ #include "immintrin.h" diff --git a/gcc/testsuite/gcc.target/i386/wbnoinvd-1.c b/gcc/testsuite/gcc.target/i386/wbnoinvd-1.c index bda84cd4c94..697f148b26c 100644 --- a/gcc/testsuite/gcc.target/i386/wbnoinvd-1.c +++ b/gcc/testsuite/gcc.target/i386/wbnoinvd-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mwbnoinvd" } */ -/* { dg-final { scan-assembler-times "wbnoinvd" 2 } } */ +/* { dg-final { scan-assembler-times {\twbnoinvd} 1 } } */ #include "x86intrin.h" |