summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* x86: Add 'V' register operand modifierhjl/indirect/loopH.J. Lu2018-01-073-1/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add 'V', a special modifier which prints the name of the full integer register without '%'. For extern void (*func_p) (void); void foo (void) { asm ("call __x86_indirect_thunk_%V0" : : "a" (func_p)); } it generates: foo: movq func_p(%rip), %rax call __x86_indirect_thunk_rax ret gcc/ * config/i386/i386.c (print_reg): Print the name of the full integer register without '%'. (ix86_print_operand): Handle 'V'. * doc/extend.texi: Document 'V' modifier. gcc/testsuite/ * gcc.target/i386/indirect-thunk-register-4.c: New test.
* x86: Add -mindirect-branch-registerH.J. Lu2018-01-0752-68/+158
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add -mindirect-branch-register to force indirect branch via register. This is implemented by disabling patterns of indirect branch via memory, similar to TARGET_X32. -mindirect-branch= and -mfunction-return= tests are updated with -mno-indirect-branch-register to avoid false test failures when -mindirect-branch-register is added to RUNTESTFLAGS for "make check". gcc/ * config/i386/constraints.md (Bs): Disallow memory operand for -mindirect-branch-register. (Bw): Likewise. * config/i386/predicates.md (indirect_branch_operand): Likewise. (GOT_memory_operand): Likewise. (call_insn_operand): Likewise. (sibcall_insn_operand): Likewise. (GOT32_symbol_operand): Likewise. * config/i386/i386.md (indirect_jump): Call convert_memory_address for -mindirect-branch-register. (tablejump): Likewise. (*sibcall_memory): Likewise. (*sibcall_value_memory): Likewise. Disallow peepholes of indirect call and jump via memory for -mindirect-branch-register. (*call_pop): Replace m with Bw. (*call_value_pop): Likewise. (*sibcall_pop_memory): Replace m with Bs. * config/i386/i386.opt (mindirect-branch-register): New option. * doc/invoke.texi: Document -mindirect-branch-register option. gcc/testsuite/ * gcc.target/i386/indirect-thunk-1.c (dg-options): Add -mno-indirect-branch-register. * gcc.target/i386/indirect-thunk-2.c: Likewise. * gcc.target/i386/indirect-thunk-3.c: Likewise. * gcc.target/i386/indirect-thunk-4.c: Likewise. * gcc.target/i386/indirect-thunk-5.c: Likewise. * gcc.target/i386/indirect-thunk-6.c: Likewise. * gcc.target/i386/indirect-thunk-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. * gcc.target/i386/indirect-thunk-loop-1.c: Likewise. * gcc.target/i386/indirect-thunk-loop-2.c: Likewise. * gcc.target/i386/indirect-thunk-loop-3.c: Likewise. * gcc.target/i386/indirect-thunk-loop-4.c: Likewise. * gcc.target/i386/indirect-thunk-loop-5.c: Likewise. * gcc.target/i386/ret-thunk-10.c: Likewise. * gcc.target/i386/ret-thunk-11.c: Likewise. * gcc.target/i386/ret-thunk-12.c: Likewise. * gcc.target/i386/ret-thunk-13.c: Likewise. * gcc.target/i386/ret-thunk-14.c: Likewise. * gcc.target/i386/ret-thunk-15.c: Likewise. * gcc.target/i386/ret-thunk-9.c: Likewise. * gcc.target/i386/indirect-thunk-register-1.c: New test. * gcc.target/i386/indirect-thunk-register-2.c: Likewise. * gcc.target/i386/indirect-thunk-register-3.c: Likewise.
* x86: Add -mfunction-return=H.J. Lu2018-01-0756-49/+476
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add -mfunction-return= option to convert function return to call and return thunks. The default is 'keep', which keeps function return unmodified. 'thunk' converts function return to call and return thunk. 'thunk-inline' converts function return to inlined call and return thunk. 'thunk-extern' converts function return to external call and return thunk provided in a separate object file. You can control this behavior for a specific function by using the function attribute function_return. Function return thunk is the same as memory thunk for -mindirect-branch= where the return address is at the top of the stack: __x86_return_thunk: call L2 L1: lfence jmp L1 L2: lea 8(%rsp), %rsp|lea 4(%esp), %esp ret and function return becomes jmp __x86_return_thunk -mindirect-branch= tests are updated with -mfunction-return=keep to avoid false test failures when -mfunction-return=lfence is added to RUNTESTFLAGS for "make check". gcc/ * config/i386/i386-protos.h (ix86_output_function_return): New. * config/i386/i386.c (ix86_set_indirect_branch_type): Also set function_return_type. (indirect_thunk_name): Add ret_p to indicate thunk for function return. (output_indirect_thunk_function): Pass false to indirect_thunk_name. (ix86_output_indirect_branch): Likewise. (output_indirect_thunk_function): Create alias for function return thunk if regno < 0. (ix86_output_function_return): New function. (ix86_handle_fndecl_attribute): Handle function_return. (ix86_attribute_table): Add function_return. * config/i386/i386.h (machine_function): Add function_return_type. * config/i386/i386.md (simple_return_internal): Use ix86_output_function_return. (simple_return_internal_long): Likewise. * config/i386/i386.opt (mfunction-return=): New option. (indirect_branch): Mention -mfunction-return=. * doc/extend.texi: Document function_return function attribute. * doc/invoke.texi: Document -mfunction-return= option. gcc/testsuite/ * gcc.target/i386/indirect-thunk-1.c (dg-options): Add -mfunction-return=keep. * gcc.target/i386/indirect-thunk-2.c: Likewise. * gcc.target/i386/indirect-thunk-3.c: Likewise. * gcc.target/i386/indirect-thunk-4.c: Likewise. * gcc.target/i386/indirect-thunk-5.c: Likewise. * gcc.target/i386/indirect-thunk-6.c: Likewise. * gcc.target/i386/indirect-thunk-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. * gcc.target/i386/ret-thunk-1.c: New test. * gcc.target/i386/ret-thunk-10.c: Likewise. * gcc.target/i386/ret-thunk-11.c: Likewise. * gcc.target/i386/ret-thunk-12.c: Likewise. * gcc.target/i386/ret-thunk-13.c: Likewise. * gcc.target/i386/ret-thunk-14.c: Likewise. * gcc.target/i386/ret-thunk-15.c: Likewise. * gcc.target/i386/ret-thunk-16.c: Likewise. * gcc.target/i386/ret-thunk-2.c: Likewise. * gcc.target/i386/ret-thunk-3.c: Likewise. * gcc.target/i386/ret-thunk-4.c: Likewise. * gcc.target/i386/ret-thunk-5.c: Likewise. * gcc.target/i386/ret-thunk-6.c: Likewise. * gcc.target/i386/ret-thunk-7.c: Likewise. * gcc.target/i386/ret-thunk-8.c: Likewise. * gcc.target/i386/ret-thunk-9.c: Likewise.
* x86: Add -mindirect-branch-loop=H.J. Lu2018-01-079-3/+143
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add -mindirect-branch-loop= option to control loop filler in call and return thunks generated by -mindirect-branch=. 'lfence' uses "lfence" as loop filler. 'pause' uses "pause" as loop filler. 'nop' uses "nop" as loop filler. The default is 'lfence'. gcc/ * config/i386/i386-opts.h (indirect_branch_loop): New. * config/i386/i386.c (output_indirect_thunk): Support -mindirect-branch-loop=. * config/i386/i386.opt (mindirect-branch-loop=): New option. (indirect_branch_loop): New. (lfence): Likewise. (pause): Likewise. (nop): Likewise. * doc/invoke.texi: Document -mindirect-branch-loop= option. gcc/testsuite/ * gcc.target/i386/indirect-thunk-loop-1.c: New test. * gcc.target/i386/indirect-thunk-loop-2.c: Likewise. * gcc.target/i386/indirect-thunk-loop-3.c: Likewise. * gcc.target/i386/indirect-thunk-loop-4.c: Likewise. * gcc.target/i386/indirect-thunk-loop-5.c: Likewise.
* x86: Add -mindirect-branch=H.J. Lu2018-01-0741-16/+1289
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add -mindirect-branch= option to convert indirect call and jump to call and return thunks. The default is 'keep', which keeps indirect call and jump unmodified. 'thunk' converts indirect call and jump to call and return thunk. 'thunk-inline' converts indirect call and jump to inlined call and return thunk. 'thunk-extern' converts indirect call and jump to external call and return thunk provided in a separate object file. You can control this behavior for a specific function by using the function attribute indirect_branch. 2 kinds of thunks are geneated. Memory thunk where the function address is at the top of the stack: __x86_indirect_thunk: call L2 L1: lfence jmp L1 L2: lea 8(%rsp), %rsp|lea 4(%esp), %esp ret Indirect jmp via memory, "jmp mem", is converted to push memory jmp __x86_indirect_thunk Indirect call via memory, "call mem", is converted to jmp L2 L1: push [mem] jmp __x86_indirect_thunk L2: call L1 Register thunk where the function address is in a register, reg: __x86_indirect_thunk_reg: call L2 L1: lfence jmp L1 L2: movq %reg, (%rsp)|movl %reg, (%esp) ret where reg is one of (r|e)ax, (r|e)dx, (r|e)cx, (r|e)bx, (r|e)si, (r|e)di, (r|e)bp, r8, r9, r10, r11, r12, r13, r14 and r15. Indirect jmp via register, "jmp reg", is converted to jmp __x86_indirect_thunk_reg Indirect call via register, "call reg", is converted to call __x86_indirect_thunk_reg gcc/ * config/i386/i386-opts.h (indirect_branch): New. * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise. * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone with local indirect jump when converting indirect call and jump. (ix86_set_indirect_branch_type): New. (ix86_set_current_function): Call ix86_set_indirect_branch_type. (indirectlabelno): New. (indirect_thunk_needed): Likewise. (indirect_thunk_bnd_needed): Likewise. (indirect_thunks_used): Likewise. (indirect_thunks_bnd_used): Likewise. (INDIRECT_LABEL): Likewise. (indirect_thunk_name): Likewise. (output_indirect_thunk): Likewise. (output_indirect_thunk_function): Likewise. (ix86_output_indirect_branch): Likewise. (ix86_output_indirect_jmp): Likewise. (ix86_code_end): Call output_indirect_thunk_function if needed. (ix86_output_call_insn): Call ix86_output_indirect_branch if needed. (ix86_handle_fndecl_attribute): Handle indirect_branch. (ix86_attribute_table): Add indirect_branch. * config/i386/i386.h (machine_function): Add indirect_branch_type and has_local_indirect_jump. * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump to true. (tablejump): Likewise. (*indirect_jump): Use ix86_output_indirect_jmp. (*tablejump_1): Likewise. (simple_return_indirect_internal): Likewise. * config/i386/i386.opt (mindirect-branch=): New option. (indirect_branch): New. (keep): Likewise. (thunk): Likewise. (thunk-inline): Likewise. (thunk-extern): Likewise. * doc/extend.texi: Document indirect_branch function attribute. * doc/invoke.texi: Document -mindirect-branch= option. gcc/testsuite/ * gcc.target/i386/indirect-thunk-1.c: New test. * gcc.target/i386/indirect-thunk-2.c: Likewise. * gcc.target/i386/indirect-thunk-3.c: Likewise. * gcc.target/i386/indirect-thunk-4.c: Likewise. * gcc.target/i386/indirect-thunk-5.c: Likewise. * gcc.target/i386/indirect-thunk-6.c: Likewise. * gcc.target/i386/indirect-thunk-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. * gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
* PR middle-end/81897law2018-01-074-40/+123
| | | | | | | | | | | | | | | | | | | | * tree-ssa-uninit.c (compute_control_dep_chain): Do not bail on basic blocks with a small number of successors. (convert_control_dep_chain_into_preds): Improve handling of forwarder blocks. (dump_predicates): Split apart into... (dump_pred_chain): ...here... (dump_pred_info): ...and here. (can_one_predicate_be_invalidated_p): Add debugging printfs. (can_chain_union_be_invalidated_p): Improve check for invalidation of paths. (uninit_uses_cannot_happen): Avoid unnecessary if convert_control_dep_chain_into_preds yielded nothing. PR middle-end/81897 * gcc.dg/uninit-pr81897.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256320 138bc75d-0d04-0410-961f-82ee72b054a4
* 2018-01-06 Martin Sebor <msebor@redhat.com>law2018-01-075-2/+95
| | | | | | | | | | | | | | PR tree-optimization/83640 * gimple-ssa-warn-restrict.c (builtin_access::builtin_access): Avoid subtracting negative offset from size. (builtin_access::overlap): Adjust offset bounds of the access to fall within the size of the object if possible. PR tree-optimization/83640 * gcc.dg/Wrestrict-6.c: New test. * gcc.dg/pr83640.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256319 138bc75d-0d04-0410-961f-82ee72b054a4
* PR rtl-optimization/83699law2018-01-072-10/+9
| | | | | | | | * expmed.c (extract_bit_field_1): Restrict the vector usage of extract_bit_field_as_subreg to cases in which the extracted value is also a vector. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256318 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2018-01-071-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256317 138bc75d-0d04-0410-961f-82ee72b054a4
* Remove unused variablejb2018-01-062-2/+5
| | | | | | | | | 2018-01-06 Janne Blomqvist <jb@gcc.gnu.org> * io/write.c (namelist_write): Remove unused variable "i". git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256314 138bc75d-0d04-0410-961f-82ee72b054a4
* PR 83704 Use size_t in write_characterjb2018-01-062-5/+12
| | | | | | | | | | | | | | | | | | | | For printing long characters, we need to use size_t instead of int in the argument to write_character. Regtested on x86_64-pc-linux-gnu, approved in the PR, committed to trunk. libgfortran/ChangeLog: 2018-01-06 Dominique d'Humieres <dominiq@lps.ens.fr> Janne Blomqvist <jb@gcc.gnu.org> PR fortran/83704 * io/write.c (write_character): Use size_t instead of int for length. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256313 138bc75d-0d04-0410-961f-82ee72b054a4
* Tighten LRA cycling checkrsandifo2018-01-064-1/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | LRA has code to try to prevent cycling, by avoiding reloads that look too similar to the instruction being reloaded. E.g. if we have a R<-C move for some constant C, reloading the source with another R<-C move is unlikely to be a good idea. However, this safeguard unnecessarily triggered in tests like the one in the patch. We started with instructions like: (insn 12 9 13 5 (set (reg:DI 0 x0) (reg/f:DI 459)) "reg-alloc-1.c":18 47 {*movdi_aarch64} (expr_list:REG_EQUAL (symbol_ref:DI ("x00") [flags 0xc0] <var_decl 0x7f3c03c1f510 x00>) (nil))) where r459 didn't get allocated a register and is equivalent to constant x00. LRA would then handle it like this: Changing pseudo 459 in operand 1 of insn 12 on equiv `x00' 1 Non-pseudo reload: reject+=2 1 Non input pseudo reload: reject++ -------> Cycle danger: overall += LRA_MAX_REJECT alt=0,overall=609,losers=1,rld_nregs=1 [...] alt=13,overall=9,losers=1,rld_nregs=1 [...] Choosing alt 13 in insn 12: (0) r (1) w {*movdi_aarch64} In other words, to avoid loading the constant x00 into another GPR, LRA decided instead to move it into a floating-point register, then move that floating-point register into x0: Creating newreg=630, assigning class FP_REGS to r630 Set class ALL_REGS for r631 12: x0:DI=r630:DI REG_EQUAL `x00' Inserting insn reload before: 815: r631:DI=high(`x00') 816: r630:DI=r631:DI+low(`x00') REG_EQUAL `x00' That's inefficient and doesn't really help to resolve a cycling problem, since the r630 destination of 816 needs to be reloaded into a GPR anyway. The cycling check already had an exception for source values that are the result of an elimination. This patch extends it to include the result of equivalence substitution. 2018-01-06 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * lra-constraints.c (process_alt_operands): Test for the equivalence substitutions when detecting a possible reload cycle. gcc/testsuite/ * gcc.target/aarch64/reg-alloc-1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256312 138bc75d-0d04-0410-961f-82ee72b054a4
* PR 78534 libgfortran ChangeLogjb2018-01-061-0/+25
| | | | | | | | The libgfortran/ChangeLog entry was accidentally not included in r256284. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256311 138bc75d-0d04-0410-961f-82ee72b054a4
* PR 50892 Latent bug in char pointer assignmentjb2018-01-064-1/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | Due to r256284 (PR 78534) there was a latent bug that reared it's head due to different character length types in the pointer assignment. Fixed by this patch, which also adds a reduced testcase. Regtested on x86_64-pc-linux-gnu, committed to trunk as obvious. gcc/fortran/ChangeLog: 2018-01-06 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/50892 * trans-expr.c (gfc_trans_pointer_assignment): fold_convert rhs to lhs type. gcc/testsuite/ChangeLog: 2018-01-06 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/50892 * gfortran.dg/char_pointer_assign_icb_1.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256310 138bc75d-0d04-0410-961f-82ee72b054a4
* PR debug/83480jakub2018-01-064-4/+48
| | | | | | | | | | * toplev.c (process_options): Don't enable debug_nonbind_markers_p by default if flag_selective_schedling{,2}. Formatting fixes. * gcc.dg/pr83480.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256309 138bc75d-0d04-0410-961f-82ee72b054a4
* PR rtl-optimization/83682jakub2018-01-064-2/+32
| | | | | | | | | | | * rtl.h (const_vec_duplicate_p): Only return true for VEC_DUPLICATE if it has non-VECTOR_MODE element mode. (vec_duplicate_p): Likewise. * gcc.target/i386/pr83682.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256308 138bc75d-0d04-0410-961f-82ee72b054a4
* PR middle-end/83694jakub2018-01-062-2/+12
| | | | | | | | * cfgexpand.c (expand_debug_expr): Punt if mode1 is VOIDmode and bitsize might be greater than MAX_BITSIZE_MODE_ANY_INT. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256307 138bc75d-0d04-0410-961f-82ee72b054a4
* libgo: fix GOARCH_CACHELINESIZE on ia64ian2018-01-063-3/+3
| | | | | | | Reviewed-on: https://go-review.googlesource.com/85256 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256306 138bc75d-0d04-0410-961f-82ee72b054a4
* * go-gcc.cc (Gcc_backend::Gcc_backend): Correctian2018-01-062-1/+6
| | | | | | | math_function_type_long to take one argument. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256305 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2018-01-061-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256304 138bc75d-0d04-0410-961f-82ee72b054a4
* PR libstdc++/83626 simplify filesystem::remove and filesystem::remove_allredi2018-01-053-31/+11
| | | | | | | | | | PR libstdc++/83626 * src/filesystem/ops.cc (remove(const path&, error_code&)): Remove unnecessary symlink_status call. (remove_all(const path&, error_code&)): Use filesystem::remove. * src/filesystem/std-ops.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256301 138bc75d-0d04-0410-961f-82ee72b054a4
* PR libstdc++/83279 Use non-null offset argument for sendfileredi2018-01-052-18/+19
| | | | | | | | PR libstdc++/83279 * src/filesystem/std-ops.cc (do_copy_file): Use non-null offset with sendfile. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256289 138bc75d-0d04-0410-961f-82ee72b054a4
* PR 78534 Change character length from int to size_tjb2018-01-0551-262/+609
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In order to handle large character lengths on (L)LP64 targets, switch the GFortran character length from an int to a size_t. This is an ABI change, as procedures with character arguments take hidden arguments with the character length. I also changed the _size member in vtables from int to size_t, as there were some cases where character lengths and sizes were apparently mixed up and caused regressions otherwise. Although I haven't tested, this might enable very large derived types as well. Also, as there are some places in the frontend were negative character lengths are used as special flag values, in the frontend the character length is handled as a signed variable of the same size as a size_t, although in the runtime library it really is size_t. I haven't changed the character length variables for the co-array intrinsics, as this is something that may need to be synchronized with OpenCoarrays. This is v5 of the patch. v4 was applied but caused breakage on big endian targets. These have been fixed and tested, thanks to access to the GCC compile farm. Overview of v4 of the patch: v3 was applied but had to reverted due to breaking bootstrap. The fix is in resolve.c:resolve_charlen, where it's necessary to check that an expression is constant before using mpz_sgn. Overview of v3 of the patch: All the issues pointed out by FX's review of v2 have been fixed. In particular, there are now new functions gfc_mpz_get_hwi and gfc_mpz_set_hwi, similar to the GMP functions mpz_get_si and mpz_set_si, except that they get/set a HOST_WIDE_INT instead of a long value. Similarly, gfc_get_int_expr now takes a HOST_WIDE_INT instead of a long, gfc_extract_long is replaced by gfc_extract_hwi. Also, the preliminary work to handle gfc_charlen_type_node being unsigned has been removed. Regtested on x86_64-pc-linux-gnu, i686-pc-linux-gnu and powerpc64-unknown-linux-gnu. Also regtested all three targets by modifying gfortran-dg.exp to also test with "-g -flto", no new failures observed. frontend: 2018-01-05 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/78534 PR fortran/66310 * array.c (got_charlen): Use gfc_charlen_int_kind. * class.c (gfc_find_derived_vtab): Use gfc_size_kind instead of hardcoded kind. (find_intrinsic_vtab): Likewise. * decl.c (match_char_length): Use gfc_charlen_int_kind. (add_init_expr_to_sym): Use gfc_charlen_t and gfc_charlen_int_kind. (gfc_match_implicit): Use gfc_charlen_int_kind. * dump-parse-tree.c (show_char_const): Use gfc_charlen_t and size_t. (show_expr): Use HOST_WIDE_INT_PRINT_DEC. * expr.c (gfc_get_character_expr): Length parameter of type gfc_charlen_t. (gfc_get_int_expr): Value argument of type HOST_WIDE_INT. (gfc_extract_hwi): New function. (simplify_const_ref): Make string_len of type gfc_charlen_t. (gfc_simplify_expr): Use HOST_WIDE_INT for substring refs. * frontend-passes.c (optimize_trim): Use gfc_charlen_int_kind. * gfortran.h (gfc_mpz_get_hwi): New prototype. (gfc_mpz_set_hwi): Likewise. (gfc_charlen_t): New typedef. (gfc_expr): Use gfc_charlen_t for character lengths. (gfc_size_kind): New extern variable. (gfc_extract_hwi): New prototype. (gfc_get_character_expr): Use gfc_charlen_t for character length. (gfc_get_int_expr): Use HOST_WIDE_INT type for value argument. * gfortran.texi: Update description of hidden string length argument. * iresolve.c (check_charlen_present): Use gfc_charlen_int_kind. (gfc_resolve_char_achar): Likewise. (gfc_resolve_repeat): Pass string length directly without temporary, use gfc_charlen_int_kind. (gfc_resolve_transfer): Use gfc_charlen_int_kind. * match.c (select_intrinsic_set_tmp): Use HOST_WIDE_INT for charlen. * misc.c (gfc_mpz_get_hwi): New function. (gfc_mpz_set_hwi): New function. * module.c (atom_int): Change type from int to HOST_WIDE_INT. (parse_integer): Don't complain about large integers. (write_atom): Use HOST_WIDE_INT for integers. (mio_integer): Handle integer type mismatch. (mio_hwi): New function. (mio_intrinsic_op): Use HOST_WIDE_INT. (mio_array_ref): Likewise. (mio_expr): Likewise. * primary.c (match_substring): Use gfc_charlen_int_kind. * resolve.c (resolve_substring_charlen): Use gfc_charlen_int_kind. (resolve_character_operator): Likewise. (resolve_assoc_var): Likewise. (resolve_select_type): Use HOST_WIDE_INT for charlen, use snprintf. (resolve_charlen): Use mpz_sgn to determine sign. * simplify.c (gfc_simplify_repeat): Use HOST_WIDE_INT/gfc_charlen_t instead of long. * symbol.c (generate_isocbinding_symbol): Use gfc_charlen_int_kind. * target-memory.c (size_character): Length argument of type gfc_charlen_t. (gfc_encode_character): Likewise. (gfc_interpret_character): Use gfc_charlen_t. * target-memory.h (gfc_encode_character): Modify prototype. * trans-array.c (gfc_trans_array_ctor_element): Use existing type. (get_array_ctor_var_strlen): Use gfc_conv_mpz_to_tree_type. (trans_array_constructor): Use existing type. (get_array_charlen): Likewise. * trans-const.c (gfc_conv_mpz_to_tree_type): New function. * trans-const.h (gfc_conv_mpz_to_tree_type): New prototype. * trans-decl.c (gfc_trans_deferred_vars): Use existing type. (add_argument_checking): Likewise. * trans-expr.c (gfc_class_len_or_zero_get): Build const of type gfc_charlen_type_node. (gfc_conv_intrinsic_to_class): Use gfc_charlen_int_kind instead of 4, fold_convert to correct type. (gfc_conv_class_to_class): Build const of type size_type_node for size. (gfc_copy_class_to_class): Likewise. (gfc_conv_string_length): Use same type in expression. (gfc_conv_substring): Likewise, use HOST_WIDE_INT for charlen. (gfc_conv_string_tmp): Make sure len is of the right type. (gfc_conv_concat_op): Use same type in expression. (gfc_conv_procedure_call): Likewise. (fill_with_spaces): Comment out memset() block due to spurious -Wstringop-overflow warnings. (gfc_trans_string_copy): Use gfc_charlen_type_node. (alloc_scalar_allocatable_for_subcomponent_assignment): fold_convert to right type. (gfc_trans_subcomponent_assign): Likewise. (trans_class_vptr_len_assignment): Build const of correct type. (gfc_trans_pointer_assignment): Likewise. (alloc_scalar_allocatable_for_assignment): fold_convert to right type in expr. (trans_class_assignment): Build const of correct type. * trans-intrinsic.c (gfc_conv_associated): Likewise. (gfc_conv_intrinsic_repeat): Do calculation in sizetype. * trans-io.c (gfc_build_io_library_fndecls): Use gfc_charlen_type_node for character lengths. (set_string): Convert to right type in assignment. * trans-stmt.c (gfc_trans_label_assign): Build const of gfc_charlen_type_node. (trans_associate_var): Likewise. (gfc_trans_character_select): Likewise. (gfc_trans_allocate): Likewise, don't typecast strlen result. (gfc_trans_deallocate): Don't typecast strlen result. * trans-types.c (gfc_size_kind): New variable. (gfc_init_types): Determine gfc_charlen_int_kind and gfc_size_kind from size_type_node. * trans-types.h: Fix comment. testsuite: 2018-01-05 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/78534 PR fortran/66310 * gfortran.dg/char_cast_1.f90: Update scan pattern. * gfortran.dg/dependency_49.f90: Likewise. * gfortran.dg/repeat_4.f90: Use integers of kind C_SIZE_T. * gfortran.dg/repeat_7.f90: New test for PR 66310. * gfortran.dg/scan_2.f90: Handle potential cast in assignment. * gfortran.dg/string_1.f90: Limit to ilp32 targets. * gfortran.dg/string_1_lp64.f90: New test. * gfortran.dg/string_3.f90: Limit to ilp32 targets. * gfortran.dg/string_3_lp64.f90: New test. libgfortran: 2019-01-05 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/78534 * intrinsics/args.c (getarg_i4): Use gfc_charlen_type. (get_command_argument_i4): Likewise. (get_command_i4): Likewise. * intrinsics/chmod.c (chmod_internal): Likewise. * intrinsics/env.c (get_environment_variable_i4): Likewise. * intrinsics/extends_type_of.c (struct vtype): Use size_t for size member. * intrinsics/gerror.c (gerror): Use gfc_charlen_type. * intrinsics/getlog.c (getlog): Likewise. * intrinsics/hostnm.c (hostnm_0): Likewise. * intrinsics/string_intrinsics_inc.c (string_len_trim): Rework to work if gfc_charlen_type is unsigned. (string_scan): Likewise. * io/transfer.c (transfer_character): Modify prototype. (transfer_character_write): Likewise. (transfer_character_wide): Likewise. (transfer_character_wide_write): Likewise. (transfer_array): Typecast to avoid signed-unsigned comparison. * io/unit.c (is_trim_ok): Use gfc_charlen_type. * io/write.c (namelist_write): Likewise. * libgfortran.h (gfc_charlen_type): Change typedef to size_t. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256284 138bc75d-0d04-0410-961f-82ee72b054a4
* PR libstdc++/83626 handle ENOENT due to filesystem raceredi2018-01-055-22/+111
| | | | | | | | | | | | | | | | | PR libstdc++/83626 * src/filesystem/ops.cc (remove(const path&, error_code&)): Do not report an error for ENOENT. (remove_all(const path&)): Fix type of result variable. (remove_all(const path&, error_code&)): Use non-throwing increment for directory iterator. Call POSIX remove directly to avoid redundant calls to symlink_status. Do not report errors for ENOENT. * src/filesystem/std-ops.cc: Likewise. * testsuite/27_io/filesystem/operations/remove_all.cc: Test throwing overload. * testsuite/experimental/filesystem/operations/remove_all.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256283 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/83604jakub2018-01-059-67/+149
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * config/i386/i386-builtin.def (__builtin_ia32_vgf2p8affineinvqb_v64qi, __builtin_ia32_vgf2p8affineqb_v64qi, __builtin_ia32_vgf2p8mulb_v64qi): Require also OPTION_MASK_ISA_AVX512F in addition to OPTION_MASK_ISA_GFNI. (__builtin_ia32_vgf2p8affineinvqb_v16qi_mask, __builtin_ia32_vgf2p8affineqb_v16qi_mask): Require OPTION_MASK_ISA_AVX512VL instead of OPTION_MASK_ISA_SSE in addition to OPTION_MASK_ISA_GFNI. (__builtin_ia32_vgf2p8mulb_v32qi_mask): Require OPTION_MASK_ISA_AVX512VL in addition to OPTION_MASK_ISA_GFNI and OPTION_MASK_ISA_AVX512BW. (__builtin_ia32_vgf2p8mulb_v16qi_mask): Require OPTION_MASK_ISA_AVX512VL instead of OPTION_MASK_ISA_AVX512BW in addition to OPTION_MASK_ISA_GFNI. (__builtin_ia32_vgf2p8affineinvqb_v16qi, __builtin_ia32_vgf2p8affineqb_v16qi, __builtin_ia32_vgf2p8mulb_v16qi): Require OPTION_MASK_ISA_SSE2 instead of OPTION_MASK_ISA_SSE in addition to OPTION_MASK_ISA_GFNI. * config/i386/i386.c (def_builtin): Change to builtin isa/isa2 being a requirement for all ISAs rather than any of them with a few exceptions. (ix86_add_new_builtins): Clear OPTION_MASK_ISA_64BIT from isa before processing. (ix86_expand_builtin): Require all ISAs from builtin's isa and isa2 bitmasks to be enabled with 3 exceptions, instead of requiring any enabled ISA with lots of exceptions. * config/i386/sse.md (vgf2p8affineinvqb_<mode><mask_name>, vgf2p8affineqb_<mode><mask_name>, vgf2p8mulb_<mode><mask_name>): Change avx512bw in isa attribute to avx512f. * config/i386/sgxintrin.h: Add license boilerplate. * config/i386/vaesintrin.h: Likewise. Fix macro spelling __AVX512F to __AVX512F__ and __AVX512VL to __AVX512VL__. (_mm256_aesdec_epi128, _mm256_aesdeclast_epi128, _mm256_aesenc_epi128, _mm256_aesenclast_epi128): Enable temporarily avx if __AVX__ is not defined. * config/i386/gfniintrin.h (_mm_gf2p8mul_epi8, _mm_gf2p8affineinv_epi64_epi8, _mm_gf2p8affine_epi64_epi8): Enable temporarily sse2 rather than sse if not enabled already. * gcc.target/i386/sse-26.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256281 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/83604jakub2018-01-054-54/+81
| | | | | | | | | | | | | | | * config/i386/sse.md (VI248_VLBW): Rename to ... (VI248_AVX512VL): ... this. Don't guard V32HI with TARGET_AVX512BW. (vpshrd_<mode><mask_name>, vpshld_<mode><mask_name>, vpshrdv_<mode>, vpshrdv_<mode>_mask, vpshrdv_<mode>_maskz, vpshrdv_<mode>_maskz_1, vpshldv_<mode>, vpshldv_<mode>_mask, vpshldv_<mode>_maskz, vpshldv_<mode>_maskz_1): Use VI248_AVX512VL mode iterator instead of VI248_VLBW. * gcc.target/i386/pr83604.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256280 138bc75d-0d04-0410-961f-82ee72b054a4
* * ipa-fnsummary.c (record_modified_bb_info): Add OP.hubicka2018-01-052-30/+59
| | | | | | | | (record_modified): Skip clobbers; add debug output. (param_change_prob): Use sreal frequencies. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256279 138bc75d-0d04-0410-961f-82ee72b054a4
* Revert DECL_USER_ALIGN part of r241959rsandifo2018-01-055-16/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | r241959 included code to stop the vectoriser increasing the alignment of a "user-aligned" variable. This wasn't the main purpose of the patch, but was done for consistency with pass_increase_alignment, and was needed to make the testcase work. The documentation for the aligned attribute says: This attribute specifies a minimum alignment for the variable or structure field, measured in bytes. so I think it's reasonable for the vectoriser to increase the alignment further, if that helps us to vectorise code. It's also useful if the "user" alignment actually came from an earlier pass rather than the source code. A possible counterexample came up when this was discussed on the lists. Users who are trying to collate things from several translation units into a single section can use: __attribute__((section ("whatever"), aligned(N))) and would not want extra padding. It turns out that the supported way of doing that is to add a "used" attribute, which works even when no "aligned" attribute is given. 2018-01-05 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * tree-vect-data-refs.c (vect_compute_data_ref_alignment): Don't punt for user-aligned variables. gcc/testsuite/ * gcc.dg/vect/vect-align-4.c: New test. * gcc.dg/vect/vect-nb-iter-ub-2.c (cc): Remove alignment attribute and redefine as a structure with an unaligned member "b". (foo): Update accordingly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256277 138bc75d-0d04-0410-961f-82ee72b054a4
* Make chrec_contains_symbols true for POLY_INT_CSTrsandifo2018-01-052-0/+6
| | | | | | | | | | | 2018-01-05 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * tree-chrec.c (chrec_contains_symbols): Return true for POLY_INT_CST. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256276 138bc75d-0d04-0410-961f-82ee72b054a4
* [PATCH PR82439][simplify-rtx] Simplify (x | y) == x -> (y & ~x) == 0sudi2018-01-055-21/+169
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch add support for the missing transformation of (x | y) == x -> (y & ~x) == 0. The transformation for (x & y) == x case already exists in simplify-rtx.c since 2014 as of r218503 and this patch only adds a couple of extra patterns for the IOR case. This benefits targets that have the BICS instruction to generate better code. For targets that do not have the BICS instructions, it still results in no worse code generation and gives out 2 instructions. ChangeLog Entries: *** gcc/ChangeLog *** 2018-01-05 Sudakshina Das <sudi.das@arm.com> PR target/82439 * simplify-rtx.c (simplify_relational_operation_1): Add simplifications of (x|y) == x for BICS pattern. *** gcc/testsuite/ChangeLog *** 2018-01-05 Sudakshina Das <sudi.das@arm.com> PR target/82439 * gcc.target/aarch64/bics_5.c: New test. * gcc.target/arm/bics_5.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256275 138bc75d-0d04-0410-961f-82ee72b054a4
* PR tree-optimization/83605jakub2018-01-054-0/+36
| | | | | | | | | | | * gimple-ssa-strength-reduction.c: Include tree-eh.h. (find_candidates_dom_walker::before_dom_children): Ignore stmts that can throw. * gcc.dg/pr83605.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256274 138bc75d-0d04-0410-961f-82ee72b054a4
* RTEMS/EPIPHANY: Add RTEMS supportsh2018-01-055-6/+52
| | | | | | | | | | | | | | gcc/ * config.gcc (epiphany-*-elf*): Add (epiphany-*-rtems*) configuration. * config/epiphany/rtems.h: New file. libgcc/ * config.host (epiphany-*-elf*): Add (epiphany-*-rtems*) configuration. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256273 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2018-01-051-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256272 138bc75d-0d04-0410-961f-82ee72b054a4
* PR libstdc++/83626 Don't throw for remove("") and remove_all("")redi2018-01-047-42/+273
| | | | | | | | | | | | | | | | | PR libstdc++/83626 * src/filesystem/ops.cc (remove(const path&, error_code&))): Remove redundant call to ec.clear(). (remove_all(const path&, error_code&))): Do not return an error for non-existent paths. * src/filesystem/std-ops.cc: Likewise. * testsuite/27_io/filesystem/operations/remove.cc: New test. * testsuite/27_io/filesystem/operations/remove_all.cc: Fix expected results for non-existent paths. * testsuite/experimental/filesystem/operations/remove.cc: New test. * testsuite/experimental/filesystem/operations/remove_all.cc: Fix expected results for non-existent paths. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256269 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/83554jakub2018-01-045-4/+32
| | | | | | | | | | | | | * config/i386/i386.md (*<rotate_insn>hi3_1 splitter): Use QIreg_operand instead of register_operand predicate. * config/i386/i386.c (ix86_rop_should_change_byte_p, set_rop_modrm_reg_bits, ix86_mitigate_rop): Use -mmitigate-rop in comments instead of -fmitigate[-_]rop. * gcc.target/i386/pr83554.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256268 138bc75d-0d04-0410-961f-82ee72b054a4
* Avoid Solaris/SPARC comparison failures with Solaris as (PR bootstrap/81926)ro2018-01-043-0/+11
| | | | | | | | | | PR bootstrap/81926 * cgraphunit.c (symbol_table::compile): Switch to text_section before calling assembly_start debug hook. * run-rtl-passes.c (run_rtl_passes): Likewise. Include output.h. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256267 138bc75d-0d04-0410-961f-82ee72b054a4
* PR ipa/82352jakub2018-01-042-1/+7
| | | | | | | | * g++.dg/ipa/pr82352.C (size_t): Define to __SIZE_TYPE__ instead of long unsigned int. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256266 138bc75d-0d04-0410-961f-82ee72b054a4
* 2018-01-04 Thomas Koenig <tkoenig@gcc.gnu.org>tkoenig2018-01-048-16/+433
| | | | | | | | | | | | | | | | | | | | | PR fortran/83683 PR fortran/45689 * check.c (gfc_check_eoshift): Check for string length and for conformance of boundary. * intrinsic.c (add_functions): Add gfc_simplify_eoshift. * intrinsic.h: Add prototype for gfc_simplify_eoshift. * simplify.c (gfc_simplify_eoshift): New function. 2018-01-04 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/83683 PR fortran/45689 * gfortran.dg/eoshift_8.f90: New test. * gfortran.dg/simplify_eoshift_1.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256265 138bc75d-0d04-0410-961f-82ee72b054a4
* Protect second call to extract_range_from_multiplicative_op_1rsandifo2018-01-042-1/+7
| | | | | | | | | | | | | | | | | | | | | | | Following on from: * tree-vrp.c (extract_range_from_multiplicative_op_1): Assert for VR_RANGE only; don't allow VR_ANTI_RANGE. (extract_range_from_binary_expr_1): Don't call extract_range_from_multiplicative_op_1 if !range_int_cst_p. there was a later call to extract_range_from_multiplicative_op_1 too, that used a negative test for a symbolic (!is_gimple_min_invariant) range rather than a positive test for an integer range. 2017-11-04 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * tree-vrp.c (extract_range_from_binary_expr_1): Check range_int_cst_p rather than !symbolic_range_p before calling extract_range_from_multiplicative_op_1. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256262 138bc75d-0d04-0410-961f-82ee72b054a4
* * tree-ssa-math-opts.c (execute_cse_reciprocals_1): Removelaw2018-01-042-2/+6
| | | | | | redundant test in assertion. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256260 138bc75d-0d04-0410-961f-82ee72b054a4
* Document machine_mode wrapper classesrsandifo2018-01-042-0/+111
| | | | | | | | | | 2018-01-04 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * doc/rtl.texi: Document machine_mode wrapper classes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256259 138bc75d-0d04-0410-961f-82ee72b054a4
* Add tree_fits_uhwi_p tests to BIT_FIELD_REF folderrsandifo2018-01-042-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | The first BIT_FIELD_REF folding pattern assumed without checking that operands satisfy tree_fits_uhwi_p. The second pattern does check this: /* On constants we can use native encode/interpret to constant fold (nearly) all BIT_FIELD_REFs. */ if (CONSTANT_CLASS_P (arg0) && can_native_interpret_type_p (type) && BITS_PER_UNIT == 8 && tree_fits_uhwi_p (op1) && tree_fits_uhwi_p (op2)) so this patch adds the checks to the first pattern too. This is needed for POLY_INT_CST bit positions. 2018-01-04 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * fold-const.c (fold_ternary_loc): Check tree_fits_uhwi_p before using tree_to_uhwi. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256258 138bc75d-0d04-0410-961f-82ee72b054a4
* Allow VEC_PERM_EXPR folding to failrsandifo2018-01-042-1/+7
| | | | | | | | | | | | | | | tree-ssa-forwprop.c was asserting that a VEC_PERM_EXPR fold on three VECTOR_CSTs would always succeed, but it's possible for it to fail with variable-length vectors. 2017-12-22 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * tree-ssa-forwprop.c (is_combined_permutation_identity): Allow the VEC_PERM_EXPR fold to fail. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256257 138bc75d-0d04-0410-961f-82ee72b054a4
* PR debug/83585jakub2018-01-044-0/+34
| | | | | | | | | | * bb-reorder.c (insert_section_boundary_note): Set has_bb_partition to switched_sections. * gcc.dg/pr83585.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256256 138bc75d-0d04-0410-961f-82ee72b054a4
* [PR c++/83667] Fix tree_dump ICEnathan2018-01-042-3/+10
| | | | | | | | | https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00218.html PR c++/83667 * g++.dg/ipa/pr83667.C: Fix regex, require alias. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256254 138bc75d-0d04-0410-961f-82ee72b054a4
* PR83680: Inverted test in arm_vectorize_vec_perm_constrsandifo2018-01-042-1/+7
| | | | | | | | | | | | 2018-01-04 Richard Sandiford <richard.sandiford@linaro.org> gcc/ PR target/83680 * config/arm/arm.c (arm_vectorize_vec_perm_const): Fix inverted test for d.testing. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256251 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/83387bergner2018-01-042-1/+8
| | | | | | | | * config/rs6000/rs6000.c (rs6000_discover_homogeneous_aggregate): Do not allow arguments in FP registers if TARGET_HARD_FLOAT is false. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256250 138bc75d-0d04-0410-961f-82ee72b054a4
* Avoid redundant calls to filesystem::status_knownredi2018-01-043-4/+14
| | | | | | | | * include/bits/fs_ops.h (exists(const path&, error_code&))): Only check status_known once. * include/experimental/bits/fs_ops.h: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256243 138bc75d-0d04-0410-961f-82ee72b054a4
* PR debug/83666jakub2018-01-044-1/+40
| | | | | | | | | | * cfgexpand.c (expand_dbeug_expr) <case BIT_FIELD_REF>: Punt if mode is BLKmode and bitpos not zero or mode change is needed. * gcc.dg/pr83666.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256232 138bc75d-0d04-0410-961f-82ee72b054a4
* PR libstdc++/83607 specialize Boyer-Moore searchers for std::byteredi2018-01-044-19/+100
| | | | | | | | | | | | | | PR libstdc++/83607 * include/std/functional (__is_byte_like): New trait. (__is_std_equal_to): Remove. (__boyer_moore_base_t): Use __is_byte_like instead of __is_std_equal_to. * include/experimental/functional (__is_std_equal_to): Remove. (__boyer_moore_base_t): Use __is_byte_like instead of __is_std_equal_to. * testsuite/20_util/function_objects/83607.cc: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256231 138bc75d-0d04-0410-961f-82ee72b054a4