aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2021-10-20Restore --param=max-fsm-thread-lengthAldy Hernandez3-0/+16
The removal of --param=max-fsm-thread-length is causing code explosion. I thought that --param=max-fsm-thread-path-insns was a better gague for path profitability than raw BB length, but it turns out that we don't take into account PHIs when estimating the number of statements. In this PR, we have a sequence of very large PHIs that have us traversing extremely large paths that blow up the compilation. We could fix this a couple of different ways. We could avoid traversing more than a certain number of PHI arguments, or ignore large PHIs altogether. The old implementation certainly had this knob, and we could cut things off before we even got to the ranger. We could also adjust the instruction estimation to take into account PHIs, but I'm sure we'll mess something else in the process ;-). The easiest thing to do is just restore the knob. At a later time we could tweak this further, for instance, disregarding empty blocks in the count. BTW, this is the reason I didn't chop things off in the lowlevel registry for all threaders: the forward threader can't really explore too deep paths, but it could theoretically get there while threading over empty blocks. This fixes 102814, 102852, and I bet it solves the Linux kernel cross compile issue. Tested on x86-64 Linux. gcc/ChangeLog: PR tree-optimization/102814 * doc/invoke.texi: Document --param=max-fsm-thread-length. * params.opt: Add --param=max-fsm-thread-length. * tree-ssa-threadbackward.c (back_threader_profitability::profitable_path_p): Fail on paths longer than max-fsm-thread-length.
2021-10-20Fix PR middle-end/102764Eric Botcazou2-1/+15
This is a regression present on the mainline in the form of -fcompare-debug failure at -O3 on a compiler-generated testcase. Fixed by disregarding a debug statement in the last position of a basic block to reset the current location for the outgoing edges. gcc/ PR middle-end/102764 * cfgexpand.c (expand_gimple_basic_block): Disregard a final debug statement to reset the current location for the outgoing edges. gcc/testsuite/ * gcc.dg/pr102764.c: New test.
2021-10-20Avoid exception propagation during bootstrapArnaud Charlet1-5/+69
This addresses PR ada/100486, which is the bootstrap failure of GCC 11 for 32-bit Windows in the MSYS setup. The PR shows that we cannot rely on exception propagation being operational during the bootstrap, at least on the 11 branch, so fix this by removing the problematic raise statement. gcc/ada/ PR ada/100486 * sem_prag.adb (Check_Valid_Library_Unit_Pragma): Do not raise an exception as part of the bootstrap.
2021-10-20gfortran.dg/bind-c-contiguous-5.c: Big-endian fixTobias Burnus1-0/+101
gcc/testsuite/ PR fortran/102815 * gfortran.dg/bind-c-contiguous-5.c (do_call, reset_var): Handle big andian.
2021-10-20c++: Fix up push_local_extern_decl_alias error recovery [PR102642]Jakub Jelinek4-4/+19
My recent push_local_extern_decl_alias change broke error-recovery, do_pushdecl can return error_mark_node and set_decl_tls_model can't be called on that. There are other code paths that store error_mark_node into DECL_LOCAL_DECL_ALIAS, with the intent to differentiate the cases where we haven't yet tried to push it into the namespace scope (NULL) and one where we have tried it but it failed (error_mark_node), but looking around, there are other spots where we call functions or do processing which doesn't tolerate error_mark_node. So, the first hunk with the testcase fixes the testcase, the others fix what I've spotted and the fix was easy to figure out (there are I think 3 other spots mainly for function multiversioning). 2021-10-20 Jakub Jelinek <jakub@redhat.com> PR c++/102642 * name-lookup.c (push_local_extern_decl_alias): Don't call set_decl_tls_model on error_mark_node. * decl.c (make_rtl_for_nonlocal_decl): Don't call set_user_assembler_name on error_mark_node. * parser.c (cp_parser_oacc_declare): Ignore DECL_LOCAL_DECL_ALIAS if it is error_mark_node. (cp_parser_omp_declare_target): Likewise. * g++.dg/tls/pr102642.C: New test.
2021-10-20Disallow loop rotation and loop header crossing in jump threaders.Aldy Hernandez20-218/+206
There is a lot of fall-out from this patch, as there were many threading tests that assumed the restrictions introduced by this patch were valid. Some tests have merely shifted the threading to after loop optimizations, but others ended up with no threading opportunities at all. Surprisingly some tests ended up with more total threads. It was a crapshoot all around. On a postive note, there are 6 tests that no longer XFAIL, and one guality test which now passes. I felt a bit queasy about such a fundamental change wrt threading, so I ran it through my callgrind test harness (.ii files from a bootstrap). There was no change in overall compilation, DOM, or the VRP threaders. However, there was a slight increase of 1.63% in the backward threader. I'm pretty sure we could reduce this if we incorporated the restrictions into their profitability code. This way we could stop the search when we ran into one of these restrictions. Not sure it's worth it at this point. Tested on x86-64 Linux. Co-authored-by: Richard Biener <rguenther@suse.de> gcc/ChangeLog: * tree-ssa-threadupdate.c (cancel_thread): Dump threading reason on the same line as the threading cancellation. (jt_path_registry::cancel_invalid_paths): Avoid rotating loops. Avoid threading through loop headers where the path remains in the loop. libgomp/ChangeLog: * testsuite/libgomp.graphite/force-parallel-5.c: Remove xfail. gcc/testsuite/ChangeLog: * gcc.dg/Warray-bounds-87.c: Remove xfail. * gcc.dg/analyzer/pr94851-2.c: Remove xfail. * gcc.dg/graphite/pr69728.c: Remove xfail. * gcc.dg/graphite/scop-dsyr2k.c: Remove xfail. * gcc.dg/graphite/scop-dsyrk.c: Remove xfail. * gcc.dg/shrink-wrap-loop.c: Remove xfail. * gcc.dg/loop-8.c: Adjust for new threading restrictions. * gcc.dg/tree-ssa/ifc-20040816-1.c: Same. * gcc.dg/tree-ssa/pr21559.c: Same. * gcc.dg/tree-ssa/pr59597.c: Same. * gcc.dg/tree-ssa/pr71437.c: Same. * gcc.dg/tree-ssa/pr77445-2.c: Same. * gcc.dg/tree-ssa/ssa-dom-thread-4.c: Same. * gcc.dg/tree-ssa/ssa-dom-thread-7.c: Same. * gcc.dg/vect/bb-slp-16.c: Same. * gcc.dg/tree-ssa/ssa-dom-thread-6.c: Remove. * gcc.dg/tree-ssa/ssa-dom-thread-18.c: Remove. * gcc.dg/tree-ssa/ssa-dom-thread-2a.c: Remove. * gcc.dg/tree-ssa/ssa-thread-invalid.c: New test.
2021-10-20Trivial fix to gil-1.c when analyzer is not enabledJeff Law1-0/+1
gcc/testsuite * gcc.dg/plugin/gil-1.c: Add dg-require-effective-target marker.
2021-10-20tree-object-size: Make unknown a computationSiddhesh Poyarekar1-57/+43
Compute the unknown size value as a function of the min/max bit of object_size_type. This transforms into a neat little branchless sequence on x86_64: movl %edi, %eax sarl %eax xorl $1, %eax negl %eax cltq which should be faster than loading the value from memory. A quick unscientific test using `time make check-gcc RUNTESTFLAGS="dg.exp=builtin*"` shaves about half a second off execution time with this. Also simplify implementation of unknown_object_size. gcc/ChangeLog: * tree-object-size.c (unknown): Make into a function. Adjust all uses. (unknown_object_size): Simplify implementation. Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
2021-10-20Adjust testcase for O2 vectorization.liuhongt19-34/+967
As discussed in [1], this patch add xfail/target selector to those testcases, also make a copy of them so that they can be tested w/o vectorization. Newly added xfail/target selectors are used to check the vectorization capability of continuous byte/double bytes storage, these scenarios are exactly the part of the testcases that regressed after O2 vectorization. [1] https://gcc.gnu.org/pipermail/gcc-patches/2021-October/581456.html. 2021-10-19 Hongtao Liu <hongtao.liu@intel.com> Kewen Lin <linkw@linux.ibm.com> gcc/ChangeLog * doc/sourcebuild.texi (Effective-Target Keywords): Document vect_slp_v2qi_store, vect_slp_v4qi_store, vect_slp_v8qi_store, vect_slp_v16qi_store, vect_slp_v2hi_store, vect_slp_v4hi_store, vect_slp_v2si_store, vect_slp_v4si_store. gcc/testsuite/ChangeLog PR middle-end/102722 PR middle-end/102697 PR middle-end/102462 PR middle-end/102706 PR middle-end/102744 * c-c++-common/Wstringop-overflow-2.c: Adjust testcase with new xfail/target selector. * gcc.dg/Warray-bounds-51.c: Ditto. * gcc.dg/Warray-parameter-3.c: Ditto. * gcc.dg/Wstringop-overflow-14.c: Ditto. * gcc.dg/Wstringop-overflow-21.c: Ditto. * gcc.dg/Wstringop-overflow-68.c: Ditto. * gcc.dg/Wstringop-overflow-76.c: Ditto. * gcc.dg/Warray-bounds-48.c: Ditto. * gcc.dg/Wzero-length-array-bounds-2.c: Ditto. * lib/target-supports.exp (check_vect_slp_aligned_store_usage): New function. (check_effective_target_vect_slp_v2qi_store): Ditto. (check_effective_target_vect_slp_v4qi_store): Ditto. (check_effective_target_vect_slp_v8qi_store): Ditto. (check_effective_target_vect_slp_v16qi_store): Ditto. (check_effective_target_vect_slp_v2hi_store): Ditto. (check_effective_target_vect_slp_v4hi_store): Ditto. (check_effective_target_vect_slp_v2si_store): Ditto. (check_effective_target_vect_slp_v4si_store): Ditto. * c-c++-common/Wstringop-overflow-2-novec.c: New test. * gcc.dg/Warray-bounds-51-novec.c: New test. * gcc.dg/Warray-bounds-48-novec.c: New test. * gcc.dg/Warray-parameter-3-novec.c: New test. * gcc.dg/Wstringop-overflow-14-novec.c: New test. * gcc.dg/Wstringop-overflow-21-novec.c: New test. * gcc.dg/Wstringop-overflow-76-novec.c: New test. * gcc.dg/Wzero-length-array-bounds-2-novec.c: New test.
2021-10-20Daily bump.GCC Administrator5-1/+230
2021-10-19doc: Fix typo in name of PowerPC __builtin_cpu_supports built-inJonathan Wakely1-1/+1
gcc/ChangeLog: * doc/extend.texi (Basic PowerPC Built-in Functions): Fix typo.
2021-10-19rs6000: Guard some x86 intrinsics implementationsPaul A. Clarke5-12/+24
Some compatibility implementations of x86 intrinsics include Power intrinsics which require POWER8. Guard them. emmintrin.h: - _mm_cmpord_pd: Remove code which was ostensibly for pre-POWER8, but which indeed depended on POWER8 (vec_cmpgt(v2du)/vcmpgtud). The "POWER8" version works fine on pre-POWER8. - _mm_mul_epu32: vec_mule(v4su) uses vmuleuw. pmmintrin.h: - _mm_movehdup_ps: vec_mergeo(v4su) uses vmrgow. - _mm_moveldup_ps: vec_mergee(v4su) uses vmrgew. smmintrin.h: - _mm_cmpeq_epi64: vec_cmpeq(v2di) uses vcmpequd. - _mm_mul_epi32: vec_mule(v4si) uses vmuluwm. - _mm_cmpgt_epi64: vec_cmpgt(v2di) uses vcmpgtsd. tmmintrin.h: - _mm_sign_epi8: vec_neg(v4si) uses vsububm. - _mm_sign_epi16: vec_neg(v4si) uses vsubuhm. - _mm_sign_epi32: vec_neg(v4si) uses vsubuwm. Note that the above three could actually be supported pre-POWER8, but current GCC does not support them before POWER8. - _mm_sign_pi8: depends on _mm_sign_epi8. - _mm_sign_pi16: depends on _mm_sign_epi16. - _mm_sign_pi32: depends on _mm_sign_epi32. sse4_2-pcmpgtq.c: - _mm_cmpgt_epi64: vec_cmpeq(v2di) uses vcmpequd. 2021-10-19 Paul A. Clarke <pc@us.ibm.com> gcc PR target/101893 PR target/102719 * config/rs6000/emmintrin.h: Guard POWER8 intrinsics. * config/rs6000/pmmintrin.h: Same. * config/rs6000/smmintrin.h: Same. * config/rs6000/tmmintrin.h: Same. gcc/testsuite * gcc.target/powerpc/sse4_2-pcmpgtq.c: Tighten dg constraints to minimally Power8.
2021-10-19rs6000: Add nmmintrin.h to extra_headersPaul A. Clarke1-0/+1
Fix an omission in commit 29fb1e831bf1c25e4574bf2f98a9f534e5c67665. 2021-10-19 Paul A. Clarke <pc@us.ibm.com> gcc * config.gcc (extra_headers): Add nmmintrin.h.
2021-10-19Fortran: Fix 'fn spec' for deferred character lengthTobias Burnus1-1/+5
Shows now up with gfortran.dg/deferred_type_param_6.f90 due to more ME optimizations, causing fails without this commit. gcc/fortran/ChangeLog: * trans-types.c (create_fn_spec): For allocatable/pointer character(len=:), use 'w' not 'R' as fn spec for the length dummy argument.
2021-10-19Refactor vect_supportable_dr_alignmentRichard Biener3-56/+85
This refactors vect_supportable_dr_alignment to get the misalignment as input parameter which allows us to elide modifying/restoring of DR_MISALIGNMENT during alignment peeling analysis which eventually makes it more straight-forward to split out the negative step handling. 2021-10-19 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (vect_supportable_dr_alignment): Add misalignment parameter. * tree-vect-data-refs.c (vect_get_peeling_costs_all_drs): Do not change DR_MISALIGNMENT in place, instead pass the adjusted misalignment to vect_supportable_dr_alignment. (vect_peeling_supportable): Likewise. (vect_peeling_hash_get_lowest_cost): Adjust. (vect_enhance_data_refs_alignment): Likewise. (vect_vfa_access_size): Likewise. (vect_supportable_dr_alignment): Add misalignment parameter and simplify. * tree-vect-stmts.c (get_negative_load_store_type): Adjust. (get_group_load_store_type): Likewise. (get_load_store_type): Likewise.
2021-10-19Fortran: Fix "str" to scalar descriptor conversion [PR92482]Tobias Burnus2-20/+39
PR fortran/92482 gcc/fortran/ChangeLog: * trans-expr.c (gfc_conv_procedure_call): Use TREE_OPERAND not build_fold_indirect_ref_loc to undo an ADDR_EXPR. gcc/testsuite/ChangeLog: * gfortran.dg/bind-c-char-descr.f90: Remove xfail; extend a bit.
2021-10-19aix: ensure reference to __tls_get_addr is in text section.Clément Chigot1-5/+5
The garbage collector of AIX linker might remove the reference to __tls_get_addr if it's added inside an unused csect, which can be the case of .data with very simple programs. gcc/ChangeLog: 2021-10-19 Clément Chigot <clement.chigot@atos.net> * config/rs6000/rs6000.c (rs6000_xcoff_file_end): Move __tls_get_addr reference to .text csect.
2021-10-19target: Support whitespaces in target attr/pragma.Martin Liska2-0/+5
PR target/102375 gcc/ChangeLog: * config/aarch64/aarch64.c (aarch64_process_one_target_attr): Strip whitespaces. gcc/testsuite/ChangeLog: * gcc.target/aarch64/pr102375.c: New test.
2021-10-19Refactor load/store costingRichard Biener3-25/+40
This passes down the already available alignment scheme and misalignment to the load/store costing routines, removing redundant queries. 2021-10-19 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (vect_get_store_cost): Adjust signature. (vect_get_load_cost): Likewise. * tree-vect-data-refs.c (vect_get_data_access_cost): Get alignment support scheme and misalignment as arguments and pass them down. (vect_get_peeling_costs_all_drs): Compute that info here and note that we shouldn't need to. * tree-vect-stmts.c (vect_model_store_cost): Get alignment support scheme and misalignment as arguments. (vect_get_store_cost): Likewise. (vect_model_load_cost): Likewise. (vect_get_load_cost): Likewise. (vectorizable_store): Pass down alignment support scheme and misalignment to costing. (vectorizable_load): Likewise.
2021-10-19Compute negative offset in get_load_store_typeRichard Biener1-12/+21
This moves the computation of a negative offset that needs to be applied when we vectorize a negative stride access to get_load_store_type alongside where we compute the actual access method. 2021-10-19 Richard Biener <rguenther@suse.de> * tree-vect-stmts.c (get_negative_load_store_type): Add offset output parameter and initialize it. (get_group_load_store_type): Likewise. (get_load_store_type): Likewise. (vectorizable_store): Use offset as computed by get_load_store_type. (vectorizable_load): Likewise.
2021-10-19tree-optimization/102827 - avoid stmts in preheaderRichard Biener2-6/+28
The PR shows that when carefully crafting the runtime alias condition in the vectorizer we might end up using defs from the loop preheader but will end up inserting the condition before the .LOOP_VECTORIZED call. So the following makes sure to insert invariants before that when we versioned the loop, preserving the invariant the vectorizer relies on. 2021-10-19 Richard Biener <rguenther@suse.de> PR tree-optimization/102827 * tree-if-conv.c (predicate_statements): Add pe parameter and use that edge to insert invariant stmts on. (combine_blocks): Pass through pe. (tree_if_conversion): Compute the edge to insert invariant stmts on and pass it along. * gcc.dg/pr102827.c: New testcase.
2021-10-19PR target/102785: Correct addsub/subadd patterns on bfin.Roger Sayle1-23/+23
This patch resolves PR target/102785 where my recent patch to constant fold saturating addition/subtraction exposed a latent bug in the bfin backend. The patterns used for blackfin's V2HI ssaddsub and sssubadd instructions had the indices/operations swapped. This was harmless until we started evaluating these expressions at compile-time, when the mismatch was caught by the testsuite. 2021-10-19 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog PR target/102785 * config/bfin/bfin.md (addsubv2hi3, subaddv2hi3, ssaddsubv2hi3, sssubaddv2hi3): Swap the order of operators in vec_concat.
2021-10-19rs6000: Remove unspecs for vec_mrghl[bhw]Xionghu Luo5-198/+116
vmrghb only accepts permute index {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23} no matter for BE or LE in ISA, similarly for vmrglb. Remove UNSPEC_VMRGH_DIRECT/UNSPEC_VMRGL_DIRECT pattern as vec_select + vec_concat as normal RTL. Tested pass on P8LE, P9LE and P8BE{m32}. gcc/ChangeLog: 2021-10-19 Xionghu Luo <luoxhu@linux.ibm.com> * config/rs6000/altivec.md (*altivec_vmrghb_internal): Delete. (altivec_vmrghb_direct): New. (*altivec_vmrghh_internal): Delete. (altivec_vmrghh_direct): New. (*altivec_vmrghw_internal): Delete. (altivec_vmrghw_direct_<mode>): New. (altivec_vmrghw_direct): Delete. (*altivec_vmrglb_internal): Delete. (altivec_vmrglb_direct): New. (*altivec_vmrglh_internal): Delete. (altivec_vmrglh_direct): New. (*altivec_vmrglw_internal): Delete. (altivec_vmrglw_direct_<mode>): New. (altivec_vmrglw_direct): Delete. * config/rs6000/rs6000-p8swap.c (rtx_is_swappable_p): Adjust. * config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Adjust. * config/rs6000/vsx.md (vsx_xxmrghw_<mode>): Adjust. (vsx_xxmrglw_<mode>): Adjust. gcc/testsuite/ChangeLog: 2021-10-19 Xionghu Luo <luoxhu@linux.ibm.com> * gcc.target/powerpc/builtins-1.c: Update instruction counts.
2021-10-19Change threading comment before pass_ccp pass.Aldy Hernandez1-3/+1
gcc/ChangeLog: * passes.def: Change threading comment before pass_ccp pass.
2021-10-19Optimize the builtin vec_xl_sextHaochen Gui2-11/+57
gcc/ * config/rs6000/rs6000-call.c (altivec_expand_lxvr_builtin): Modify the expansion for sign extension. All extensions are done within VSX registers. gcc/testsuite/ * gcc.target/powerpc/p10_vec_xl_sext.c: New test.
2021-10-19[sve] PR93183 - Add support for conditional neg.prathamesh.kulkarni1-1/+1
gcc/testsuite/ChangeLog: PR target/93183 * gcc.target/aarch64/sve/pr93183.c: Remove -mcpu=generic+sve from dg-options.
2021-10-19Add misalignment output parameter to get_load_store_typeRichard Biener1-12/+27
This makes us compute the misalignment alongside the alignment support scheme in get_load_store_type, removing some out-of-place calls to the DR alignment API. 2021-10-18 Richard Biener <rguenther@suse.de> * tree-vect-stmts.c (get_group_load_store_type): Add misalignment output parameter and initialize it. (get_group_load_store_type): Likewise. (vectorizable_store): Remove now redundant queries. (vectorizable_load): Likewise.
2021-10-19c++: Don't reject calls through PMF during constant evaluation [PR102786]Jakub Jelinek2-0/+15
The following testcase incorrectly rejects the c initializer, while in the s.*a case cxx_eval_* sees .__pfn reads etc., in the s.*&S::foo case get_member_function_from_ptrfunc creates expressions which use INTEGER_CSTs with type of pointer to METHOD_TYPE. And cxx_eval_constant_expression rejects any INTEGER_CSTs with pointer type if they aren't 0. Either we'd need to make sure we defer such folding till cp_fold but the function and pfn_from_ptrmemfunc is used from lots of places, or the following patch just tries to reject only non-zero INTEGER_CSTs with pointer types if they don't point to METHOD_TYPE in the hope that all such INTEGER_CSTs with POINTER_TYPE to METHOD_TYPE are result of folding valid pointer-to-member function expressions. I don't immediately see how one could create such INTEGER_CSTs otherwise, cast of integers to PMF is rejected and would have the PMF RECORD_TYPE anyway, etc. 2021-10-19 Jakub Jelinek <jakub@redhat.com> PR c++/102786 * constexpr.c (cxx_eval_constant_expression): Don't reject INTEGER_CSTs with type POINTER_TYPE to METHOD_TYPE. * g++.dg/cpp2a/constexpr-virtual19.C: New test.
2021-10-19Remove check_aligned parameter from vect_supportable_dr_alignmentRichard Biener3-25/+30
There are two calls with true as parameter, one is only relevant for the case of the misalignment being unknown which means the access is never aligned there, the other is in the peeling hash insert code used conditional on the unlimited cost model which adds an artificial count. But the way it works right now is that it boosts the count if the specific misalignment when not peeling is unsupported - in particular when the access is currently aligned we'll query the backend with a misalign value of zero. I've changed it to boost the peeling when unknown alignment is not supported instead and noted how we could in principle improve this. 2021-10-19 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (vect_supportable_dr_alignment): Remove check_aligned argument. * tree-vect-data-refs.c (vect_supportable_dr_alignment): Likewise. (vect_peeling_hash_insert): Add supportable_if_not_aligned argument and do not call vect_supportable_dr_alignment here. (vect_peeling_supportable): Adjust. (vect_enhance_data_refs_alignment): Compute whether the access is supported with different alignment here and pass that down to vect_peeling_hash_insert. (vect_vfa_access_size): Adjust. * tree-vect-stmts.c (vect_get_store_cost): Likewise. (vect_get_load_cost): Likewise. (get_negative_load_store_type): Likewise. (get_group_load_store_type): Likewise. (get_load_store_type): Likewise.
2021-10-19target: support spaces in target attribute.Martin Liska3-0/+26
PR target/102374 gcc/ChangeLog: * config/i386/i386-options.c (ix86_valid_target_attribute_inner_p): Strip whitespaces. * system.h (strip_whilespaces): New function. gcc/testsuite/ChangeLog: * gcc.target/i386/pr102374.c: New test.
2021-10-19AVX512FP16: Add *_set1_pch intrinsics.dianhong xu6-0/+171
Add *_set1_pch (_Float16 _Complex A) intrinsics. gcc/ChangeLog: * config/i386/avx512fp16intrin.h: (_mm512_set1_pch): New intrinsic. * config/i386/avx512fp16vlintrin.h: (_mm256_set1_pch): New intrinsic. (_mm_set1_pch): Ditto. gcc/testsuite/ChangeLog: * gcc.target/i386/avx512fp16-set1-pch-1a.c: New test. * gcc.target/i386/avx512fp16-set1-pch-1b.c: New test. * gcc.target/i386/avx512fp16vl-set1-pch-1a.c: New test. * gcc.target/i386/avx512fp16vl-set1-pch-1b.c: New test.
2021-10-19Daily bump.GCC Administrator4-1/+356
2021-10-18Process EH edges again and call get_tree_range on non gimple_range_ssa_p names.Andrew MacLeod2-5/+23
PR tree-optimization/102796 gcc/ * gimple-range.cc (gimple_ranger::range_on_edge): Process EH edges normally. Return get_tree_range for non gimple_range_ssa_p names. (gimple_ranger::range_of_stmt): Use get_tree_range for non gimple_range_ssa_p names. gcc/testsuite/ * g++.dg/pr102796.C: New.
2021-10-18openmp: Add additional tests for declare variant in FortranKwok Cheung Yeung2-1/+26
Add tests to check that explicitly specifying the containing procedure as the base name for declare variant works. 2021-10-18 Kwok Cheung Yeung <kcy@codesourcery.com> gcc/testsuite/ * gfortran.dg/gomp/declare-variant-15.f90 (variant2, base2, test2): Add tests. * gfortran.dg/gomp/declare-variant-16.f90 (base2, variant2, test2): Add tests.
2021-10-18i386: Fix ICE in ix86_print_opreand_address [PR 102761]Uros Bizjak2-1/+15
2021-10-18 Uroš Bizjak <ubizjak@gmail.com> PR target/102761 gcc/ChangeLog: * config/i386/i386.c (ix86_print_operand_address): Error out for non-address_operand asm operands. gcc/testsuite/ChangeLog: * gcc.target/i386/pr102761.c: New test.
2021-10-18c++: improve template/crash90.CJason Merrill1-1/+2
In r208350 I improved the diagnostic location of the initializer-list pedwarn in C++98 mode on crash90.C, but didn't adjust the testcase to verify the location, so reverting that change didn't break regression testing. gcc/testsuite/ChangeLog: * g++.dg/template/crash90.C: Check location of pedwarn.
2021-10-18Apply TLC to vect_supportable_dr_alignmentRichard Biener2-31/+18
This fixes handling of the return value of vect_supportable_dr_alignment in multiple places. We should use the enum type and not int for storage and not auto-convert the enum return value to bool. It also commonizes the read/write path in vect_supportable_dr_alignment. 2021-10-18 Richard Biener <rguenther@suse.de> * tree-vect-data-refs.c (vect_peeling_hash_insert): Do not auto-convert dr_alignment_support to bool. (vect_peeling_supportable): Likewise. (vect_enhance_data_refs_alignment): Likewise. (vect_supportable_dr_alignment): Commonize read/write case. * tree-vect-stmts.c (vect_get_store_cost): Use dr_alignment_support, not int, for the vect_supportable_dr_alignment result. (vect_get_load_cost): Likewise.
2021-10-18tree-object-size: Avoid unnecessary processing of __builtin_object_sizeSiddhesh Poyarekar1-7/+5
This is a minor cleanup to bail out early if the result of __builtin_object_size is not assigned to anything and avoid initializing the object size arrays. gcc/ChangeLog: * tree-object-size.c (object_sizes_execute): Consolidate LHS null check and do it early. Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
2021-10-18Reduce the number of aligned_access_p callsRichard Biener1-4/+7
This uses the computed alignment scheme in vectorizable_store much like vectorizable_load does instead of re-querying it via aligned_access_p. 2021-10-18 Richard Biener <rguenther@suse.de> * tree-vect-stmts.c (vectorizable_store): Use the computed alignment scheme instead of querying aligned_access_p.
2021-10-18Remove redundant alignment scheme recomputationRichard Biener1-8/+0
The following avoids the recomputation of the alignment scheme which is already fully determined by get_load_store_type. 2021-10-18 Richard Biener <rguenther@suse.de> * tree-vect-stmts.c (vectorizable_store): Do not recompute alignment scheme already determined by get_load_store_type.
2021-10-18Clone correct pass in class pass_thread_jumps_full.Aldy Hernandez1-1/+1
The pass_thread_jumps_full pass was cloning the wrong pass. gcc/ChangeLog: * tree-ssa-threadbackward.c (class pass_thread_jumps_full): Clone corresponding pass.
2021-10-18387-12.c: Require ia32 target instead of -m32H.J. Lu1-2/+2
On x86-64, $ make check RUNTESTFLAGS="--target_board='unix{-m32,}'" can be used to test both 64-bit and 32-bit targets. Require ia32 target instead of explicit -m32 for 32-bit only test. * gcc.target/i386/387-12.c (dg-do compile): Require ia32. (dg-options): Remove -m32.
2021-10-18Try placing RTL folded constants in the constant pool.Roger Sayle4-36/+43
My recent attempts to come up with a testcase for my patch to evaluate ss_plus in simplify-rtx.c, identified a missed optimization opportunity (that's potentially a long-time regression): The RTL optimizers no longer place constants in the constant pool. The motivating x86_64 example is the simple program: typedef char v8qi __attribute__ ((vector_size (8))); v8qi foo() { v8qi tx = { 1, 0, 0, 0, 0, 0, 0, 0 }; v8qi ty = { 2, 0, 0, 0, 0, 0, 0, 0 }; v8qi t = __builtin_ia32_paddsb(tx, ty); return t; } which (with my previous patch) currently results in: foo: movq .LC0(%rip), %xmm0 movq .LC1(%rip), %xmm1 paddsb %xmm1, %xmm0 ret even though the RTL contains the result in a REG_EQUAL note: (insn 7 6 12 2 (set (reg:V8QI 83) (ss_plus:V8QI (reg:V8QI 84) (reg:V8QI 85))) "ssaddqi3.c":7:12 1419 {*mmx_ssaddv8qi3} (expr_list:REG_DEAD (reg:V8QI 85) (expr_list:REG_DEAD (reg:V8QI 84) (expr_list:REG_EQUAL (const_vector:V8QI [ (const_int 3 [0x3]) (const_int 0 [0]) repeated x7 ]) (nil))))) Together with the patch below, GCC will now generate the much more sensible: foo: movq .LC2(%rip), %xmm0 ret My first approach was to look in cse.c (where the REG_EQUAL note gets added) and notice that the constant pool handling functionality has been unreachable for a while. A quick search for constant_pool_entries_cost shows that it's initialized to zero, but never set to a non-zero value, meaning that force_const_mem is never called. This functionality used to work way back in 2003, but has been lost over time: https://gcc.gnu.org/pipermail/gcc-patches/2003-October/116435.html The changes to cse.c below restore this functionality (placing suitable constants in the constant pool) with two significant refinements; (i) it only attempts to do this if the function already uses a constant pool (thanks to the availability of crtl->uses_constant_pool since 2003). (ii) it allows different constants (i.e. modes) to have different costs, so that floating point "doubles" and 64-bit, 128-bit, 256-bit and 512-bit vectors don't all have the share the same cost. Back in 2003, the assumption was that everything in a constant pool had the same cost, hence the global variable constant_pool_entries_cost. Although this is a useful CSE fix, it turns out that it doesn't cure my motivating problem above. CSE only considers a single instruction, so determines that it's cheaper to perform the ss_plus (COSTS_N_INSNS(1)) than read the result from the constant pool (COSTS_N_INSNS(2)). It's only when the other reads from the constant pool are also eliminated, that this transformation is a win. Hence a better place to perform this transformation is in combine, where after failing to "recog" the load of a suitable constant, it can retry after calling force_const_mem. This achieves the desired transformation and allows the backend insn_cost call-back to control whether or not using the constant pool is preferrable. Alas, it's rare to change code generation without affecting something in GCC's testsuite. On x86_64-pc-linux-gnu there were two families of new failures (and I'd predict similar benign fallout on other platforms). One failure was gcc.target/i386/387-12.c (aka PR target/26915), where the test is missing an explicit -m32 flag. On i686, it's very reasonable to materialize -1.0 using "fld1; fchs", but on x86_64-pc-linux-gnu we currently generate the awkward: testm1: fld1 fchs fstpl -8(%rsp) movsd -8(%rsp), %xmm0 ret which combine now very reasonably simplifies to just: testm1: movsd .LC3(%rip), %xmm0 ret The other class of x86_64-pc-linux-gnu failure was from materialization of vector constants using vpbroadcast (e.g. gcc.target/i386/pr90773-17.c) where the decision is finely balanced; the load of an integer register with an immediate constant, followed by a vpbroadcast is deemed to be COSTS_N_INSNS(2), whereas a load from the constant pool is also reported as COSTS_N_INSNS(2). My solution is to tweak the i386.c's rtx_costs so that all other things being equal, an instruction (sequence) that accesses memory is fractionally more expensive than one that doesn't. 2021-10-18 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * combine.c (recog_for_combine): For an unrecognized move/set of a constant, try force_const_mem to place it in the constant pool. * cse.c (constant_pool_entries_cost, constant_pool_entries_regcost): Delete global variables (that are no longer assigned a cost value). (cse_insn): Simplify logic for deciding whether to place a folded constant in the constant pool using force_const_mem. (cse_main): Remove zero initialization of constant_pool_entries_cost and constant_pool_entries_regcost. * config/i386/i386.c (ix86_rtx_costs): Make memory accesses fractionally more expensive, when optimizing for speed. gcc/testsuite/ChangeLog * gcc.target/i386/387-12.c: Add explicit -m32 option.
2021-10-18gcov: return proper exit code when error happensMartin Liska1-4/+23
PR gcov-profile/102746 PR gcov-profile/102747 gcc/ChangeLog: * gcov.c (main): Return return_code. (output_gcov_file): Mark return_code when error happens. (generate_results): Likewise. (read_graph_file): Likewise. (read_count_file): Likewise.
2021-10-18bfin: Popcount-related improvements to machine description.Roger Sayle4-4/+52
Blackfin processors support a ONES instruction that implements a 32-bit popcount returning a 16-bit result. This instruction was previously described by GCC's bfin backend using an UNSPEC, which this patch changes to use a popcount:SI rtx thats capture its semantics, allowing it to evaluated and simplified at compile-time. I've decided to keep the instruction name the same (avoiding any changes to the __builtin_bfin_ones machinery), but have provided popcountsi2 and popcounthi2 expanders so that the middle-end can use this instruction to implement __builtin_popcount (and __builtin_parity). The new testcase ones.c short foo () { int t = 5; short r = __builtin_bfin_ones(t); return r; } previously generated: _foo: nop; nop; R0 = 5 (X); R0.L = ONES R0; rts; with this patch, now generates: _foo: nop; nop; nop; R0 = 2 (X); rts; The new testcase popcount.c int foo(int x) { return __builtin_popcount(x); } previously generated: _foo: [--SP] = RETS; SP += -12; call ___popcountsi2; SP += 12; RETS = [SP++]; rts; now generates: _foo: nop; nop; R0.L = ONES R0; R0 = R0.L (Z); rts; And the new testcase parity.c int foo(int x) { return __builtin_parity(x); } previously generated: _foo: [--SP] = RETS; SP += -12; call ___paritysi2; SP += 12; RETS = [SP++]; rts; now generates: _foo: nop; R1 = 1 (X); R0.L = ONES R0; R0 = R1 & R0; rts; 2021-10-18 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/bfin/bfin.md (define_constants): Remove UNSPEC_ONES. (define_insn "ones"): Replace UNSPEC_ONES with a truncate of a popcount, allowing compile-time evaluation/simplification. (popcountsi2, popcounthi2): New expanders using a "ones" insn. gcc/testsuite/ChangeLog * gcc.target/bfin/ones.c: New test case. * gcc.target/bfin/parity.c: New test case. * gcc.target/bfin/popcount.c: New test case.
2021-10-18tree-optimization/102788 - avoid spurious bool pattern failsRichard Biener2-5/+35
Bool pattern recog is required for correctness since vectorized compares otherwise produce -1 for true so any context where bool is used as value and not as condition or mask needs to be replaced with CMP ? 1 : 0. When we fail to find a vector type for the result of such use we may not simply elide such transform since a new bool result can emerge when for example the cast_forwprop pattern is applied. So the following avoids failing of the bool pattern recog process and instead not assign a vector type for the stmt. 2021-10-18 Richard Biener <rguenther@suse.de> PR tree-optimization/102788 * tree-vect-patterns.c (vect_init_pattern_stmt): Allow a NULL vectype. (vect_pattern_recog_1): Likewise. (vect_recog_bool_pattern): Continue matching the pattern even if we do not have a vector type for a conversion result. * g++.dg/vect/pr102788.cc: New testcase.
2021-10-18Constant fold SS_NEG and SS_ABS in simplify-rtx.cRoger Sayle3-0/+36
This simple patch performs compile-time constant folding of signed saturating negation and signed saturating absolute value in the RTL optimizers. Normally in two's complement arithmetic the lowest representable signed value overflows on negation, With these saturating operators they "saturate" to the maximum representable signed value, so SS_NEG:QI -128 is 127, and SS_ABS:HI -32768 is 32767. On bfin-elf, the following two short functions: short foo() { short t = -32768; short r = __builtin_bfin_negate_fr1x16(t); return r; } int bar() { int t = -2147483648; int r = __builtin_bfin_abs_fr1x32(t); return r; } currently compile to: _foo: nop; nop; R0 = -32768 (X); R0 = -R0 (V); rts; _bar: nop; R0 = -1 (X); R0 <<= 31; R0 = abs R0; rts; but with this middle-end patch now compile to: _foo: nop; nop; nop; R0 = 32767 (X); rts; _bar: nop; nop; R0 = -1 (X); R0.H = 32767; rts; 2021-10-18 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * simplify-rtx.c (simplify_const_unary_operation) [SS_NEG, SS_ABS]: Evalute SS_NEG and SS_ABS of a constant argument. gcc/testsuite/ChangeLog * gcc.target/bfin/ssabs.c: New test case. * gcc.target/bfin/ssneg.c: New test case.
2021-10-18[sve] PR93183 - Add support for conditional neg.prathamesh.kulkarni7-3/+67
gcc/ChangeLog: PR target/93183 * gimple-match-head.c (try_conditional_simplification): Add case for single operand. * internal-fn.def: Add entry for COND_NEG internal function. * internal-fn.c (FOR_EACH_CODE_MAPPING): Add entry for NEGATE_EXPR, COND_NEG mapping. * optabs.def: Add entry for cond_neg_optab. * match.pd (UNCOND_UNARY, COND_UNARY): New operator lists. (vec_cond COND (foo A) B) -> (IFN_COND_FOO COND A B): New pattern. (vec_cond COND B (foo A)) -> (IFN_COND_FOO ~COND A B): Likewise. gcc/testsuite/ChangeLog: PR target/93183 * gcc.target/aarch64/sve/cond_unary_4.c: Adjust. * gcc.target/aarch64/sve/pr93183.c: New test.
2021-10-18Strlen pass refactoring.Aldy Hernandez1-225/+257
This refactors the strlen pass to avoid passing around as much state. It is meant to be a start. There's still some more refactoring that could be done, especially in cleaning up the interface between the strlen internals and the sprintf pass. Tested on x86-64 Linux. gcc/ChangeLog: * tree-ssa-strlen.c (class strlen_pass): Rename from strlen_dom_walker. (handle_builtin_stxncpy_strncat): Move to strlen_pass. (handle_assign): Same. (adjust_last_stmt): Same. (maybe_warn_overflow): Same. (handle_builtin_strlen): Same. (handle_builtin_strchr): Same. (handle_builtin_strcpy): Same. (handle_builtin_strncat): Same. (handle_builtin_stxncpy_strncat): Same. (handle_builtin_memcpy): Same. (handle_builtin_strcat): Same. (handle_alloc_call): Same. (handle_builtin_memset): Same. (handle_builtin_memcmp): Same. (get_len_or_size): Same. (strxcmp_eqz_result): Same. (handle_builtin_string_cmp): Same. (handle_pointer_plus): Same. (count_nonzero_bytes_addr): Same. (count_nonzero_bytes): Same. (handle_store): Same. (strlen_check_and_optimize_call): Same. (handle_integral_assign): Same. (check_and_optimize_stmt): Same. (printf_strlen_execute): Rename strlen_dom_walker to strlen_pass.
2021-10-18Fortran: Fix Bind(C) Array-Descriptor ConversionTobias Burnus68-475/+9125
gfortran uses internally a different array descriptor ("gfc") as Fortran 2018 alias TS291113 defines for C interoperability via ISO_Fortran_binding.h ("CFI"). Hence, when calling a C function from Fortran, it has to be converted in the callee - and if a BIND(C) procedure is written in Fortran, the CFI argument has to be converted to gfc in order work with the rest of the FE code and the library calls. Before this patch, part was handled in the FE generated code and other parts in libgfortran. With this patch, all code is generated and CFI is defined as proper type - visible in the debugger and to the middle end - avoiding both alias issues and missed optimization issues. This patch also fixes issues like: intent(out) deallocation in the bind(C) callee, using the CFI descriptor also for allocatable and pointer scalars and for len=* character strings. For 'select rank', it also optimizes the code + avoid accessing uninitialized memory if the dummy argument is allocatable/a pointer. It additionally rejects passing a descriptorless type(*) to an assumed-rank dummy argument. [F2018:C711] PR fortran/102086 PR fortran/92189 PR fortran/92621 PR fortran/101308 PR fortran/101309 PR fortran/101635 PR fortran/92482 gcc/fortran/ChangeLog: * decl.c (gfc_verify_c_interop_param): Remove 'sorry' for scalar allocatable/pointer and len=*. * expr.c (is_CFI_desc): Return true for for those. * gfortran.h (CFI_type_kind_shift, CFI_type_mask, CFI_type_from_type_kind, CFI_VERSION, CFI_MAX_RANK, CFI_attribute_pointer, CFI_attribute_allocatable, CFI_attribute_other, CFI_type_Integer, CFI_type_Logical, CFI_type_Real, CFI_type_Complex, CFI_type_Character, CFI_type_ucs4_char, CFI_type_struct, CFI_type_cptr, CFI_type_cfunptr, CFI_type_other): New #define. * trans-array.c (CFI_FIELD_BASE_ADDR, CFI_FIELD_ELEM_LEN, CFI_FIELD_VERSION, CFI_FIELD_RANK, CFI_FIELD_ATTRIBUTE, CFI_FIELD_TYPE, CFI_FIELD_DIM, CFI_DIM_FIELD_LOWER_BOUND, CFI_DIM_FIELD_EXTENT, CFI_DIM_FIELD_SM, gfc_get_cfi_descriptor_field, gfc_get_cfi_desc_base_addr, gfc_get_cfi_desc_elem_len, gfc_get_cfi_desc_version, gfc_get_cfi_desc_rank, gfc_get_cfi_desc_type, gfc_get_cfi_desc_attribute, gfc_get_cfi_dim_item, gfc_get_cfi_dim_lbound, gfc_get_cfi_dim_extent, gfc_get_cfi_dim_sm): New define/functions to access the CFI array descriptor. (gfc_conv_descriptor_type): New function for the GFC descriptor. (gfc_get_array_span): Handle expr of CFI descriptors and assumed-type descriptors. (gfc_trans_array_bounds): Remove 'static'. (gfc_conv_expr_descriptor): For assumed type, use the dtype of the actual argument. (structure_alloc_comps): Remove ' ' inside tabs. * trans-array.h (gfc_trans_array_bounds, gfc_conv_descriptor_type, gfc_get_cfi_desc_base_addr, gfc_get_cfi_desc_elem_len, gfc_get_cfi_desc_version, gfc_get_cfi_desc_rank, gfc_get_cfi_desc_type, gfc_get_cfi_desc_attribute, gfc_get_cfi_dim_lbound, gfc_get_cfi_dim_extent, gfc_get_cfi_dim_sm): New prototypes. * trans-decl.c (gfor_fndecl_cfi_to_gfc, gfor_fndecl_gfc_to_cfi): Remove global vars. (gfc_build_builtin_function_decls): Remove their initialization. (gfc_get_symbol_decl, create_function_arglist, gfc_trans_deferred_vars): Update for CFI. (convert_CFI_desc): Remove and replace by ... (gfc_conv_cfi_to_gfc): ... this function (gfc_generate_function_code): Call it; create local GFC var for CFI. * trans-expr.c (gfc_maybe_dereference_var): Handle CFI. (gfc_conv_subref_array_arg): Handle the if-noncontigous-only copy in when the result should be a descriptor. (gfc_conv_gfc_desc_to_cfi_desc): Completely rewritten. (gfc_conv_procedure_call): CFI fixes. * trans-openmp.c (gfc_omp_is_optional_argument, gfc_omp_check_optional_argument): Handle optional CFI. * trans-stmt.c (gfc_trans_select_rank_cases): Cleanup, avoid invalid code for allocatable/pointer dummies, which cannot be assumed size. * trans-types.c (gfc_cfi_descriptor_base): New global var. (gfc_get_dtype_rank_type): Skip rank init for rank < 0. (gfc_sym_type): Handle CFI dummies. (gfc_get_function_type): Update call. (gfc_get_cfi_dim_type, gfc_get_cfi_type): New. * trans-types.h (gfc_sym_type): Update prototype. (gfc_get_cfi_type): New prototype. * trans.c (gfc_trans_runtime_check): Make conditions more consistent to avoid '<logical> AND_THEN <long int>' in conditions. * trans.h (gfor_fndecl_cfi_to_gfc, gfor_fndecl_gfc_to_cfi): Remove global-var declaration. libgfortran/ChangeLog: * ISO_Fortran_binding.h (CFI_type_cfunptr): Make unique type again. * runtime/ISO_Fortran_binding.c (cfi_desc_to_gfc_desc, gfc_desc_to_cfi_desc): Add comment that those are no longer called by new code. libgomp/ChangeLog: * testsuite/libgomp.fortran/optional-bind-c.f90: New test. gcc/testsuite/ChangeLog: * gfortran.dg/ISO_Fortran_binding_4.f90: Extend testcase. * gfortran.dg/PR100914.f90: Remove xfail. * gfortran.dg/PR100915.c: Expect CFI_type_cfunptr. * gfortran.dg/PR100915.f90: Handle CFI_type_cfunptr != CFI_type_cptr. * gfortran.dg/PR93963.f90: Extend select-rank tests. * gfortran.dg/bind-c-intent-out.f90: Change to dg-do run, update scan-dump. * gfortran.dg/bind_c_array_params_2.f90: Update/extend scan-dump. * gfortran.dg/bind_c_char_10.f90: Update scan-dump. * gfortran.dg/bind_c_char_8.f90: Remove dg-error "sorry". * gfortran.dg/c-interop/allocatable-dummy.f90: Remove xfail. * gfortran.dg/c-interop/c1255-1.f90: Likewise. * gfortran.dg/c-interop/c407c-1.f90: Update dg-error. * gfortran.dg/c-interop/cf-descriptor-5.f90: Remove xfail. * gfortran.dg/c-interop/cf-out-descriptor-3.f90: Likewise. * gfortran.dg/c-interop/cf-out-descriptor-4.f90: Likewise. * gfortran.dg/c-interop/cf-out-descriptor-5.f90: Likewise. * gfortran.dg/c-interop/contiguous-2.f90: Likewise. * gfortran.dg/c-interop/contiguous-3.f90: Likewise. * gfortran.dg/c-interop/deferred-character-1.f90: Likewise. * gfortran.dg/c-interop/deferred-character-2.f90: Likewise. * gfortran.dg/c-interop/fc-descriptor-3.f90: Likewise. * gfortran.dg/c-interop/fc-descriptor-5.f90: Likewise. * gfortran.dg/c-interop/fc-descriptor-6.f90: Likewise. * gfortran.dg/c-interop/fc-out-descriptor-3.f90: Likewise. * gfortran.dg/c-interop/fc-out-descriptor-4.f90: Likewise. * gfortran.dg/c-interop/fc-out-descriptor-5.f90: Likewise. * gfortran.dg/c-interop/fc-out-descriptor-6.f90: Likewise. * gfortran.dg/c-interop/ff-descriptor-5.f90: Likewise. * gfortran.dg/c-interop/ff-descriptor-6.f90: Likewise. * gfortran.dg/c-interop/fc-descriptor-7.f90: Remove xfail + extend. * gfortran.dg/c-interop/fc-descriptor-7-c.c: Update for changes. * gfortran.dg/c-interop/shape.f90: Add implicit none. * gfortran.dg/c-interop/typecodes-array-char-c.c: Add kind=4 char. * gfortran.dg/c-interop/typecodes-array-char.f90: Likewise. * gfortran.dg/c-interop/typecodes-array-float128.f90: Remove xfail. * gfortran.dg/c-interop/typecodes-scalar-basic.f90: Likewise. * gfortran.dg/c-interop/typecodes-scalar-float128.f90: Likewise. * gfortran.dg/c-interop/typecodes-scalar-int128.f90: Likewise. * gfortran.dg/c-interop/typecodes-scalar-longdouble.f90: Likewise. * gfortran.dg/iso_c_binding_char_1.f90: Remove dg-error "sorry". * gfortran.dg/pr93792.f90: Turn XFAIL into PASS. * gfortran.dg/ISO_Fortran_binding_19.f90: New test. * gfortran.dg/assumed_type_12.f90: New test. * gfortran.dg/assumed_type_13.c: New test. * gfortran.dg/assumed_type_13.f90: New test. * gfortran.dg/bind-c-char-descr.f90: New test. * gfortran.dg/bind-c-contiguous-1.c: New test. * gfortran.dg/bind-c-contiguous-1.f90: New test. * gfortran.dg/bind-c-contiguous-2.f90: New test. * gfortran.dg/bind-c-contiguous-3.c: New test. * gfortran.dg/bind-c-contiguous-3.f90: New test. * gfortran.dg/bind-c-contiguous-4.c: New test. * gfortran.dg/bind-c-contiguous-4.f90: New test. * gfortran.dg/bind-c-contiguous-5.c: New test. * gfortran.dg/bind-c-contiguous-5.f90: New test.