This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Linaro gcc mirror + linaro-local branches".
The branch, hjl/iamcu/improve has been updated discards 8f8a55191ba800ec76d4a0f3755f4fd094f977d5 (commit) discards eb270879e8532a31ef2b774b81cc8dc00c0f3f30 (commit) discards e79526f47a90c6b3bc7e39bdf3a7a55bbf7a3e19 (commit) discards fd3c040a0ba94dd7b08f4756e820b3279d0fc8ad (commit) discards 82a870dc61befb7a7e78b214e600b68c8107fc2d (commit) discards 7774833e904fd87f55c550702e2878adc9d73c10 (commit) via 52eea662feb27accef41236c999aac5c8b6a3509 (commit) via 8d6c585f72e622293e25340810864dbe4f83d987 (commit) via 92502779149b2f41e03c0a7e0d846cbf72e33e4e (commit) via 88aeb079db646db926deb4d59e67b0c0a0ce4461 (commit) via 80bf41f2ed3e766aa39b6b2b65fe149562f75b1f (commit) via 849a880fe04d24a9a6f6f8b06e99260d8a68e894 (commit) via 07d294f7f43c401144e9f79e051fd9f801e41cdb (commit) via 67792e5e14211abaa543532ad98a2056013a8d8f (commit) via 0a2874c2bb08b247d45740f9e75ee8be994f63c6 (commit)
This update added new revisions after undoing existing revisions. That is to say, the old revision is not a strict subset of the new revision. This situation occurs when you --force push a change and generate a repository containing something like this:
* -- * -- B -- O -- O -- O (8f8a55191ba800ec76d4a0f3755f4fd094f977d5) \ N -- N -- N (52eea662feb27accef41236c999aac5c8b6a3509)
When this happens we assume that you've already had alert emails for all of the O revisions, and so we here report only the revisions in the N branch from the common base, B.
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit 52eea662feb27accef41236c999aac5c8b6a3509 Author: H.J. Lu hjl.tools@gmail.com Date: Wed Jul 8 19:46:43 2015 -0700
IA MCU run-time doesn't support TLS
Return 0 in check_effective_target_tls_native and check_effective_target_tls_emulated for IA MCU target.
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index bf512e9..72f7946 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -701,8 +701,9 @@ proc check_effective_target_tls {} {
proc check_effective_target_tls_native {} { # VxWorks uses emulated TLS machinery, but with non-standard helper - # functions, so we fail to automatically detect it. - if { [istarget *-*-vxworks*] } { + # functions, so we fail to automatically detect it. IA MCU run-time + # doesn't support TLS. + if { [istarget *-*-vxworks*] || [istarget *-*-elfiamcu] } { return 0 }
@@ -716,6 +717,11 @@ proc check_effective_target_tls_native {} { # Return 1 if *emulated* thread local storage (TLS) is supported, 0 otherwise.
proc check_effective_target_tls_emulated {} { + # IA MCU run-time doesn't support TLS. + if { [istarget *-*-elfiamcu] } { + return 0 + } + # VxWorks uses emulated TLS machinery, but with non-standard helper # functions, so we fail to automatically detect it. if { [istarget *-*-vxworks*] } {
commit 8d6c585f72e622293e25340810864dbe4f83d987 Author: H.J. Lu hjl.tools@gmail.com Date: Wed Jul 8 04:55:05 2015 -0700
Skip incompatible tests on IA MCU target
diff --git a/gcc/testsuite/gcc.target/i386/i386.exp b/gcc/testsuite/gcc.target/i386/i386.exp index 8ca6c51..9aacbf9 100644 --- a/gcc/testsuite/gcc.target/i386/i386.exp +++ b/gcc/testsuite/gcc.target/i386/i386.exp @@ -394,7 +394,12 @@ global runtests # Special case compilation of vect-args.c so we don't have to # replicate it 16 times. if [runtest_file_p $runtests $srcdir/$subdir/vect-args.c] { - foreach type { "" -mmmx -m3dnow -msse -msse2 -mavx -mavx2 -mavx512f } { + if { [istarget *-*-elfiamcu] } then { + set types { "" } + } else { + set types { "" -mmmx -m3dnow -msse -msse2 -mavx -mavx2 -mavx512f } + } + foreach type $types { foreach level { "" -O } { set flags "$type $level" verbose -log "Testing vect-args, $flags" 1 @@ -405,7 +410,89 @@ if [runtest_file_p $runtests $srcdir/$subdir/vect-args.c] {
# Everything else. set tests [lsort [glob -nocomplain $srcdir/$subdir/*.[cS]]] -set tests [prune $tests $srcdir/$subdir/vect-args.c] +set all_tests [prune $tests $srcdir/$subdir/vect-args.c] +if { [istarget *-*-elfiamcu] } then { + # Skip tests which are incompatible with Intel MCU. + set tests {} + foreach t $all_tests { + if { [string match "$srcdir/$subdir/20001127-1.c" $t] \ + || [string match "$srcdir/$subdir/20080723-1.c" $t] \ + || [string match "$srcdir/$subdir/980226-1.c" $t] \ + || [string match "$srcdir/$subdir/980414-1.c" $t] \ + || [string match "$srcdir/$subdir/addr-sel-1.c" $t] \ + || [string match "$srcdir/$subdir/pause-2.c" $t] \ + || [string match "$srcdir/$subdir/pow-1.c" $t] \ + || [string match "$srcdir/$subdir/pr30848.c" $t] \ + || [string match "$srcdir/$subdir/pr45296.c" $t] \ + || [string match "$srcdir/$subdir/pr57736.c" $t] \ + || [string match "$srcdir/$subdir/pr57848.c" $t] \ + || [string match "$srcdir/$subdir/pr58048.c" $t] \ + || [string match "$srcdir/$subdir/pr66047.c" $t] \ + || [string match "$srcdir/$subdir/readeflags-1.c" $t] \ + || [string match "$srcdir/$subdir/sibcall-6.c" $t] \ + || [string match "$srcdir/$subdir/sse-5.c" $t] \ + || [string match "$srcdir/$subdir/aggregate-ret*.c" $t] \ + || [string match "$srcdir/$subdir/avx*.c" $t] \ + || [string match "$srcdir/$subdir/funcspec-*.c" $t] \ + || [string match "$srcdir/$subdir/long-double-*.c" $t] \ + || [string match "$srcdir/$subdir/pr57756*.c" $t] \ + || [string match "$srcdir/$subdir/pr59390*.c" $t] \ + || [string match "$srcdir/$subdir/pr59794-*.c" $t] \ + || [string match "$srcdir/$subdir/pr60205-*.c" $t] \ + || [string match "$srcdir/$subdir/pr61925-*.c" $t] } { + continue + } + set options [dg-get-options $t] + if { ! [string match "*-mmmx*" $options] \ + && ! [string match "*-m3dnow*" $options] \ + && ! [string match "*-msse*" $options] \ + && ! [string match "*-mssse*" $options] \ + && ! [string match "*-mavx*" $options] \ + && ! [string match "*-madx*" $options] \ + && ! [string match "*-maes*" $options] \ + && ! [string match "*-mbmi*" $options] \ + && ! [string match "*-mclflushopt*" $options] \ + && ! [string match "*-mclwb*" $options] \ + && ! [string match "*-mf16c*" $options] \ + && ! [string match "*-mfma*" $options] \ + && ! [string match "*-mfxsr*" $options] \ + && ! [string match "*-mhle*" $options] \ + && ! [string match "*-mlzcnt*" $options] \ + && ! [string match "*-mmwaitx*" $options] \ + && ! [string match "*-mpclmul*" $options] \ + && ! [string match "*-mpcommit*" $options] \ + && ! [string match "*-mprefetchwt1*" $options] \ + && ! [string match "*-mprfchw*" $options] \ + && ! [string match "*-mrdrnd*" $options] \ + && ! [string match "*-mrdseed*" $options] \ + && ! [string match "*-mrtm*" $options] \ + && ! [string match "*-msha*" $options] \ + && ! [string match "*-mtbm*" $options] \ + && ! [string match "*-mxop*" $options] \ + && ! [string match "*-mxsave*" $options] \ + && ! [string match "*-mvzeroupper*" $options] \ + && ! [string match "*-march=i686*" $options] \ + && ! [string match "*-march=atom*" $options] \ + && ! [string match "*-march=core*" $options] \ + && ! [string match "*-march=nocona*" $options] \ + && ! [string match "*-march=pentium*" $options] \ + && ! [string match "*-march=amdfam10*" $options] \ + && ! [string match "*-march=athlon*" $options] \ + && ! [string match "*-march=barcelona*" $options] \ + && ! [string match "*-march=bdver*" $options] \ + && ! [string match "*-march=k6*" $options] \ + && ! [string match "*-march=k8*" $options] \ + && ! [string match "*-march=opteron*" $options] \ + && ! [string match "*-march=x86-64*" $options] \ + && ! [string match "*-march=native*" $options] \ + && ! [string match "*-mfpmath=*" $options] \ + && ! [string match "*-mregparm=*" $options] } { + lappend tests $t + } + } +} else { + set tests $all_tests +}
# Main loop. dg-runtest $tests "" $DEFAULT_CFLAGS
commit 92502779149b2f41e03c0a7e0d846cbf72e33e4e Author: H.J. Lu hjl.tools@gmail.com Date: Wed Jul 8 08:28:03 2015 -0700
Skip error_mark_node type decls
There is no need to analyze error_mark_node type decls.
gcc/
PR target/66810 * varpool.cvarpool.c (varpool_node::analyze): Skip error_mark_node type decls.
gcc/testsuite/
PR target/66810 * gcc.target/i386/pr66810.c: New test.
diff --git a/gcc/testsuite/gcc.target/i386/pr66810.c b/gcc/testsuite/gcc.target/i386/pr66810.c new file mode 100644 index 0000000..4778b37 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr66810.c @@ -0,0 +1,10 @@ +/* { dg-do compile { target ia32 } } */ +/* { dg-options "-mno-sse -mno-mmx -miamcu" } */ + +int vv; + +void +i (void) +{ + static int a[vv]; /* { dg-error "storage size" } */ +} diff --git a/gcc/varpool.c b/gcc/varpool.c index 10fa93c..f7c4d46 100644 --- a/gcc/varpool.c +++ b/gcc/varpool.c @@ -514,20 +514,25 @@ varpool_node::get_availability (void) void varpool_node::analyze (void) { - /* When reading back varpool at LTO time, we re-construct the queue in order - to have "needed" list right by inserting all needed nodes into varpool. - We however don't want to re-analyze already analyzed nodes. */ - if (!analyzed) + /* Skip error_mark_node type decls. */ + if (TREE_TYPE (decl) != error_mark_node) { - gcc_assert (!in_lto_p || symtab->function_flags_ready); - /* Compute the alignment early so function body expanders are - already informed about increased alignment. */ - align_variable (decl, 0); + /* When reading back varpool at LTO time, we re-construct the + queue in order to have "needed" list right by inserting all + needed nodes into varpool. We however don't want to re-analyze + already analyzed nodes. */ + if (!analyzed) + { + gcc_assert (!in_lto_p || symtab->function_flags_ready); + /* Compute the alignment early so function body expanders are + already informed about increased alignment. */ + align_variable (decl, 0); + } + if (alias) + resolve_alias (varpool_node::get (alias_target)); + else if (DECL_INITIAL (decl)) + record_references_in_initializer (decl, analyzed); } - if (alias) - resolve_alias (varpool_node::get (alias_target)); - else if (DECL_INITIAL (decl)) - record_references_in_initializer (decl, analyzed); analyzed = true; }
commit 88aeb079db646db926deb4d59e67b0c0a0ce4461 Author: H.J. Lu hjl.tools@gmail.com Date: Wed Jul 8 21:10:25 2015 -0700
Allow indirect sibcall with register arguments
Indirect sibcall with register arguments is OK when there is register available for argument passing.
gcc/
PR target/66819 * config/i386/i386.c (ix86_function_ok_for_sibcall): Allow indirect sibcall with register arguments if register available for argument passing. (init_cumulative_args): Set cfun->machine->arg_reg_available_p to cum->nregs != 0. (function_arg_advance_32): Set cfun->machine->arg_reg_available_p to 0 when setting cum->nregs = 0. * config/i386/i386.h (machine_function): Add arg_reg_available_p.
gcc/testsuite/
PR target/66819 * gcc.target/i386/pr66819-1.c: New test. * gcc.target/i386/pr66819-2.c: Likewise. * gcc.target/i386/pr66819-3.c: Likewise. * gcc.target/i386/pr66819-4.c: Likewise. * gcc.target/i386/pr66819-5.c: Likewise.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 54ee6f3..85e59a8 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5628,12 +5628,12 @@ ix86_function_ok_for_sibcall (tree decl, tree exp) if (!decl || (TARGET_DLLIMPORT_DECL_ATTRIBUTES && DECL_DLLIMPORT_P (decl))) { - if (ix86_function_regparm (type, NULL) >= 3) - { - /* ??? Need to count the actual number of registers to be used, - not the possible number of registers. Fix later. */ - return false; - } + /* FIXME: The symbol indirect call doesn't need a + call-clobbered register. But we don't know if + this is a symbol indirect call or not here. */ + if (ix86_function_regparm (type, NULL) >= 3 + && !cfun->machine->arg_reg_available_p) + return false; } }
@@ -6567,6 +6567,7 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, /* Argument info to initialize */ ? X86_64_REGPARM_MAX : X86_64_MS_REGPARM_MAX); } + cfun->machine->arg_reg_available_p = cum->nregs != 0; if (TARGET_SSE) { cum->sse_nregs = SSE_REGPARM_MAX; @@ -6636,6 +6637,7 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, /* Argument info to initialize */ else cum->nregs = ix86_function_regparm (fntype, fndecl); } + cfun->machine->arg_reg_available_p = cum->nregs != 0;
/* Set up the number of SSE registers used for passing SFmode and DFmode arguments. Warn for mismatching ABI. */ @@ -7584,6 +7586,7 @@ pass_in_reg: { cum->nregs = 0; cum->regno = 0; + cfun->machine->arg_reg_available_p = 0; } break;
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 74334ff..0b6e304 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2479,6 +2479,9 @@ struct GTY(()) machine_function { /* If true, it is safe to not save/restore DRAP register. */ BOOL_BITFIELD no_drap_save_restore : 1;
+ /* If true, there is register available for argument passing. */ + BOOL_BITFIELD arg_reg_available_p : 1; + /* During prologue/epilogue generation, the current frame state. Otherwise, the frame state at the end of the prologue. */ struct machine_frame_state fs; diff --git a/gcc/testsuite/gcc.target/i386/pr66819-1.c b/gcc/testsuite/gcc.target/i386/pr66819-1.c new file mode 100644 index 0000000..7c8a1ab --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr66819-1.c @@ -0,0 +1,8 @@ +/* { dg-do compile { target ia32 } } */ +/* { dg-options "-O2 -mregparm=3" } */ +/* { dg-final { scan-assembler-not "call" } } */ + +void foo(void (*bar)(void)) +{ + bar(); +} diff --git a/gcc/testsuite/gcc.target/i386/pr66819-2.c b/gcc/testsuite/gcc.target/i386/pr66819-2.c new file mode 100644 index 0000000..9de4f97 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr66819-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile { target ia32 } } */ +/* { dg-options "-fPIC -O2 -mregparm=3" } */ +/* { dg-final { scan-assembler-not "call" } } */ + +void foo(void (*bar)(void)) +{ + bar(); +} diff --git a/gcc/testsuite/gcc.target/i386/pr66819-3.c b/gcc/testsuite/gcc.target/i386/pr66819-3.c new file mode 100644 index 0000000..3bc5a34 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr66819-3.c @@ -0,0 +1,10 @@ +/* { dg-do compile { target ia32 } } */ +/* { dg-options "-O2 -mregparm=3" } */ +/* { dg-final { scan-assembler-not "call" } } */ + +void (*bar)(int, int); + +void foo(int i, int j) +{ + bar(i, j); +} diff --git a/gcc/testsuite/gcc.target/i386/pr66819-4.c b/gcc/testsuite/gcc.target/i386/pr66819-4.c new file mode 100644 index 0000000..18b2ccf --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr66819-4.c @@ -0,0 +1,12 @@ +/* { dg-do compile { target ia32 } } */ +/* { dg-options "-O2 -mregparm=3" } */ +/* { dg-final { scan-assembler-not "call" } } */ + +#include <stdarg.h> + +void (*bar)(int, va_list); + +void foo(int i, va_list args) +{ + bar(i, args); +} diff --git a/gcc/testsuite/gcc.target/i386/pr66819-5.c b/gcc/testsuite/gcc.target/i386/pr66819-5.c new file mode 100644 index 0000000..6b019d1 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr66819-5.c @@ -0,0 +1,10 @@ +/* { dg-do compile { target ia32 } } */ +/* { dg-options "-O2 -mregparm=3" } */ +/* { dg-final { scan-assembler "call" } } */ + +void (*bar)(int, int, int); + +void foo(int i, int j, int k) +{ + bar(i, j, k); +}
-----------------------------------------------------------------------
Summary of changes: gcc/ChangeLog | 30 +++++++ gcc/Makefile.in | 1 + gcc/config/i386/i386.c | 27 ++---- gcc/config/i386/i386.h | 3 + gcc/gimple-laddress.c | 137 ++++++++++++++++++++++++++++++ gcc/passes.def | 1 + gcc/testsuite/ChangeLog | 15 ++++ gcc/testsuite/gcc.dg/vect/vect-126.c | 63 ++++++++++++++ gcc/testsuite/gcc.target/i386/pr66819-3.c | 6 +- gcc/testsuite/gcc.target/i386/pr66819-5.c | 10 +++ gcc/timevar.def | 1 + gcc/toplev.c | 5 ++ gcc/tree-chkp-opt.c | 2 + gcc/tree-pass.h | 1 + gcc/varasm.c | 3 +- gcc/varpool.c | 29 ++++--- 16 files changed, 299 insertions(+), 35 deletions(-) create mode 100644 gcc/gimple-laddress.c create mode 100644 gcc/testsuite/gcc.dg/vect/vect-126.c create mode 100644 gcc/testsuite/gcc.target/i386/pr66819-5.c
hooks/post-receive