- Aug 07, 2023
-
-
Sheri Bernstein authored
Replace multiple returns by a single return statement with a conditional expression. This is more readable and maintainable, and also conformant with a Highly Recommended design principle of ISO 26262-6. gcc/ada/ * libgnat/s-parame__qnx.adb: Refactor multiple returns.
-
Piotr Trojanek authored
The existing precondition guarded against exception Dereference_Error, but not against Constraint_Error. The RM rule B.3.1(36/3) only mentions Constraint_Error for the Value function which returns char_array, but the one which returns String has the same restriction, because it is equivalent to calling the variant which returns char_array and then converted. gcc/ada/ * libgnat/i-cstrin.ads (Value): Extend preconditions; adapt comment for the package.
-
Yannick Moy authored
When a function is called in a predicate, it was not properly detected as not always inlined in GNATprove mode, which led to crashes later during analysis. Fixed now. gcc/ada/ * sem_res.adb (Resolve_Call): Always call Cannot_Inline so that subprogram called is marked as not always inlined.
-
Javier Miranda authored
The compiler reports an spurious error when a class-wide precondition expression has a class-wide type conversion. gcc/ada/ * sem_res.adb (Resolve_Type_Conversion): Do not warn on conversion to class-wide type on internally build helpers of class-wide preconditions.
-
Juzhe-Zhong authored
Consider this following case: #include <stdint.h> #define TEST2_TYPE(TYPE) \ __attribute__((noipa)) \ void vshiftr_##TYPE (TYPE *__restrict dst, TYPE *__restrict a, TYPE *__restrict b, int n) \ { \ for (int i = 0; i < n; i++) \ dst[i] = (a[i]) >> b[i]; \ } #define TEST_ALL() \ TEST2_TYPE(uint8_t) \ TEST2_TYPE(uint16_t) \ TEST2_TYPE(uint32_t) \ TEST2_TYPE(uint64_t) \ TEST_ALL() Both RISC-V and aarch64 of trunk GCC failed vectorize uint8_t/uint16_t with following missed report: <source>:17:1: missed: couldn't vectorize loop <source>:17:1: missed: not vectorized: relevant stmt not supported: patt_46 = MIN_EXPR <_6, 7>; <source>:17:1: missed: couldn't vectorize loop <source>:17:1: missed: not vectorized: relevant stmt not supported: patt_47 = MIN_EXPR <_7, 15>; Compiler returned: 0 Both GCC 13.1 can vectorize, see: https://godbolt.org/z/6vaMK5M1o Bootstrap and regression on X86 passed. Ok for trunk ? gcc/ChangeLog: * tree-vect-patterns.cc (vect_recog_over_widening_pattern): Add op vectype. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/binop/narrow-1.c: Adapt testcase.
-
Jan Beulich authored
The attribute defaults to 1 for TI-mode insns of type sselog, sselog1, sseiadd, sseimul, and sseishft. In *<code>v8hi3 [smaxmin] and *<code>v16qi3 [umaxmin] also drop the similarly stray "prefix_extra" at this occasion. These two max/min flavors are encoded in 0f space. gcc/ * config/i386/mmx.md (*mmx_pinsrd): Drop "prefix_data16". (*mmx_pinsrb): Likewise. (*mmx_pextrb): Likewise. (*mmx_pextrb_zext): Likewise. (mmx_pshufbv8qi3): Likewise. (mmx_pshufbv4qi3): Likewise. (mmx_pswapdv2si2): Likewise. (*pinsrb): Likewise. (*pextrb): Likewise. (*pextrb_zext): Likewise. * config/i386/sse.md (*sse4_1_mulv2siv2di3<mask_name>): Likewise. (*sse2_eq<mode>3): Likewise. (*sse2_gt<mode>3): Likewise. (<sse2p4_1>_pinsr<ssemodesuffix>): Likewise. (*vec_extract<mode>): Likewise. (*vec_extract<PEXTR_MODE12:mode>_zext): Likewise. (*vec_extractv16qi_zext): Likewise. (ssse3_ph<plusminus_mnemonic>wv8hi3): Likewise. (ssse3_pmaddubsw128): Likewise. (*<ssse3_avx2>_pmulhrsw<mode>3<mask_name>): Likewise. (<ssse3_avx2>_pshufb<mode>3<mask_name>): Likewise. (<ssse3_avx2>_psign<mode>3): Likewise. (<ssse3_avx2>_palignr<mode>): Likewise. (*abs<mode>2): Likewise. (sse4_2_pcmpestr): Likewise. (sse4_2_pcmpestri): Likewise. (sse4_2_pcmpestrm): Likewise. (sse4_2_pcmpestr_cconly): Likewise. (sse4_2_pcmpistr): Likewise. (sse4_2_pcmpistri): Likewise. (sse4_2_pcmpistrm): Likewise. (sse4_2_pcmpistr_cconly): Likewise. (vgf2p8affineinvqb_<mode><mask_name>): Likewise. (vgf2p8affineqb_<mode><mask_name>): Likewise. (vgf2p8mulb_<mode><mask_name>): Likewise. (*<code>v8hi3 [smaxmin]): Drop "prefix_data16" and "prefix_extra". (*<code>v16qi3 [umaxmin]): Likewise.
-
Jan Beulich authored
When first added explicitly in 3ddffba9 ("i386.md (sse4_1_round<mode>2): Add avx512f alternative"), "*" should not have been used for the pre-existing alternative. The attribute was plain missing. Subsequent changes adding more alternatives then generously extended the bogus pattern. Apparently something similar happened to the two mmx_pblendvb_* insns. gcc/ * config/i386/i386.md (sse4_1_round<mode>2): Make "length_immediate" uniformly 1. * config/i386/mmx.md (mmx_pblendvb_v8qi): Likewise. (mmx_pblendvb_<mode>): Likewise.
-
Jan Beulich authored
gcc/ * config/i386/sse.md (<avx512>_<complexopname>_<mode><maskc_name><round_name>): Add "prefix" attribute. (avx512fp16_<complexopname>sh_v8hf<mask_scalarc_name><round_scalarcz_name>): Likewise.
-
Jan Beulich authored
Many were lacking "prefix" and "prefix_extra", some had a bogus value of 2 for "prefix_extra" (presumably inherited from their SSE5 counterparts, which are long gone) and a meaningless "prefix_data16" one. Where missing, "mode" attributes are also added. (Note that "sse4arg" and "ssemuladd" ones don't need further adjustment in this regard.) gcc/ * config/i386/sse.md (xop_phadd<u>bw): Add "prefix", "prefix_extra", and "mode" attributes. (xop_phadd<u>bd): Likewise. (xop_phadd<u>bq): Likewise. (xop_phadd<u>wd): Likewise. (xop_phadd<u>wq): Likewise. (xop_phadd<u>dq): Likewise. (xop_phsubbw): Likewise. (xop_phsubwd): Likewise. (xop_phsubdq): Likewise. (xop_rotl<mode>3): Add "prefix" and "prefix_extra" attributes. (xop_rotr<mode>3): Likewise. (xop_frcz<mode>2): Likewise. (*xop_vmfrcz<mode>2): Likewise. (xop_vrotl<mode>3): Add "prefix" attribute. Change "prefix_extra" to 1. (xop_sha<mode>3): Likewise. (xop_shl<mode>3): Likewise.
-
Jan Beulich authored
While the attribute is relevant for legacy- and VEX-encoded insns, it is of no relevance for EVEX-encoded ones. While there in <mask_codefor>avx512dq_broadcast<mode><mask_name>_1 add the missing "length_immediate". gcc/ * config/i386/sse.md (*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Drop "prefix_extra". (avx512dq_vextract<shuffletype>64x2_1_mask): Likewise. (*avx512dq_vextract<shuffletype>64x2_1): Likewise. (avx512f_vextract<shuffletype>32x4_1_mask): Likewise. (*avx512f_vextract<shuffletype>32x4_1): Likewise. (vec_extract_lo_<mode>_mask [AVX512 forms]): Likewise. (vec_extract_lo_<mode> [AVX512 forms]): Likewise. (vec_extract_hi_<mode>_mask [AVX512 forms]): Likewise. (vec_extract_hi_<mode> [AVX512 forms]): Likewise. (@vec_extract_lo_<mode> [AVX512 forms]): Likewise. (@vec_extract_hi_<mode> [AVX512 forms]): Likewise. (vec_extract_lo_v64qi): Likewise. (vec_extract_hi_v64qi): Likewise. (*vec_widen_umult_even_v16si<mask_name>): Likewise. (*vec_widen_smult_even_v16si<mask_name>): Likewise. (*avx512f_<code><mode>3<mask_name>): Likewise. (*vec_extractv4ti): Likewise. (avx512bw_<code>v32qiv32hi2<mask_name>): Likewise. (<mask_codefor>avx512dq_broadcast<mode><mask_name>_1): Likewise. Add "length_immediate".
-
Jan Beulich authored
In the rdrand and rdseed cases "prefix_0f" is meant instead. For mmx_floatv2siv2sf2 1 is correct only for the first alternative. For the integer min/max cases 1 uniformly applies to legacy and VEX encodings (the UB and SW variants are dealt with separately anyway). Same for {,V}MOVNTDQA. Unlike {,V}PEXTRW, which has two encoding forms, {,V}PINSRW only has a single form in 0f space. (In *vec_extract<mode> note that the dropped part if the condition also referenced non-existing alternative 2.) Of the integer compare insns, only the 64-bit element forms are encoded in 0f38 space. gcc/ * config/i386/i386.md (@rdrand<mode>): Add "prefix_0f". Drop "prefix_extra". (@rdseed<mode>): Likewise. * config/i386/mmx.md (<code><mode>3 [smaxmin and umaxmin cases]): Adjust "prefix_extra". * config/i386/sse.md (@vec_set<mode>_0): Likewise. (*sse4_1_<code><mode>3<mask_name>): Likewise. (*avx2_eq<mode>3): Likewise. (avx2_gt<mode>3): Likewise. (<sse2p4_1>_pinsr<ssemodesuffix>): Likewise. (*vec_extract<mode>): Likewise. (<vi8_sse4_1_avx2_avx512>_movntdqa): Likewise.
-
Jan Beulich authored
In the three remaining instances separate "prefix_0f" and "prefix_rep" are what is wanted instead. gcc/ * config/i386/i386.md (rd<fsgs>base<mode>): Add "prefix_0f" and "prefix_rep". Drop "prefix_extra". (wr<fsgs>base<mode>): Likewise. (ptwrite<mode>): Likewise.
-
Jan Beulich authored
They're all VEX3- (also covering XOP) or EVEX-encoded. Express that in the default calculation of "prefix". FMA4 insns also all have a 1-byte immediate operand. Where the default calculation is not sufficient / applicable, add explicit "prefix" attributes. While there also add a "mode" attribute to fma_<complexpairopname>_<mode>_pair. gcc/ * config/i386/i386.md (isa): Move up. (length_immediate): Handle "fma4". (prefix): Handle "ssemuladd". * config/i386/sse.md (*fma_fmadd_<mode>): Add "prefix" attribute. (<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name><round_name>): Likewise. (<avx512>_fmadd_<mode>_mask<round_name>): Likewise. (<avx512>_fmadd_<mode>_mask3<round_name>): Likewise. (<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>): Likewise. (<avx512>_fmsub_<mode>_mask<round_name>): Likewise. (<avx512>_fmsub_<mode>_mask3<round_name>): Likewise. (*fma_fnmadd_<mode>): Likewise. (<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name><round_name>): Likewise. (<avx512>_fnmadd_<mode>_mask<round_name>): Likewise. (<avx512>_fnmadd_<mode>_mask3<round_name>): Likewise. (<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name><round_name>): Likewise. (<avx512>_fnmsub_<mode>_mask<round_name>): Likewise. (<avx512>_fnmsub_<mode>_mask3<round_name>): Likewise. (<sd_mask_codefor>fma_fmaddsub_<mode><sd_maskz_name><round_name>): Likewise. (<avx512>_fmaddsub_<mode>_mask<round_name>): Likewise. (<avx512>_fmaddsub_<mode>_mask3<round_name>): Likewise. (<sd_mask_codefor>fma_fmsubadd_<mode><sd_maskz_name><round_name>): Likewise. (<avx512>_fmsubadd_<mode>_mask<round_name>): Likewise. (<avx512>_fmsubadd_<mode>_mask3<round_name>): Likewise. (*fmai_fmadd_<mode>): Likewise. (*fmai_fmsub_<mode>): Likewise. (*fmai_fnmadd_<mode><round_name>): Likewise. (*fmai_fnmsub_<mode><round_name>): Likewise. (avx512f_vmfmadd_<mode>_mask<round_name>): Likewise. (avx512f_vmfmadd_<mode>_mask3<round_name>): Likewise. (avx512f_vmfmadd_<mode>_maskz_1<round_name>): Likewise. (*avx512f_vmfmsub_<mode>_mask<round_name>): Likewise. (avx512f_vmfmsub_<mode>_mask3<round_name>): Likewise. (*avx512f_vmfmsub_<mode>_maskz_1<round_name>): Likewise. (avx512f_vmfnmadd_<mode>_mask<round_name>): Likewise. (avx512f_vmfnmadd_<mode>_mask3<round_name>): Likewise. (avx512f_vmfnmadd_<mode>_maskz_1<round_name>): Likewise. (*avx512f_vmfnmsub_<mode>_mask<round_name>): Likewise. (*avx512f_vmfnmsub_<mode>_mask3<round_name>): Likewise. (*avx512f_vmfnmsub_<mode>_maskz_1<round_name>): Likewise. (*fma4i_vmfmadd_<mode>): Likewise. (*fma4i_vmfmsub_<mode>): Likewise. (*fma4i_vmfnmadd_<mode>): Likewise. (*fma4i_vmfnmsub_<mode>): Likewise. (fma_<complexopname>_<mode><sdc_maskz_name><round_name>): Likewise. (<avx512>_<complexopname>_<mode>_mask<round_name>): Likewise. (avx512fp16_fma_<complexopname>sh_v8hf<mask_scalarcz_name><round_scalarcz_name>): Likewise. (avx512fp16_<complexopname>sh_v8hf_mask<round_name>): Likewise. (xop_p<macs><ssemodesuffix><ssemodesuffix>): Likewise. (xop_p<macs>dql): Likewise. (xop_p<macs>dqh): Likewise. (xop_p<macs>wd): Likewise. (xop_p<madcs>wd): Likewise. (fma_<complexpairopname>_<mode>_pair): Likewise. Add "mode" attribute.
-
Jan Beulich authored
Record common properties in other attributes' default calculations: There's always a 1-byte immediate, and they're always encoded in a VEX3- like manner (note that "prefix_extra" already evaluates to 1 in this case). The drop now (or already previously) redundant explicit attributes, adding "mode" ones where they were missing. Furthermore use "sse4arg" consistently for all VPCOM* insns; so far signed comparisons did use it, while unsigned ones used "ssecmp". Note that while they have (not counting the explicit or implicit immediate operand) they really only have 3 operands, the operator is also counted in those patterns. That's relevant for establishing the "memory" attribute's value, and at the same time benign when there are only register operands. Note that despite also having 4 operands, multiply-add insns aren't affected by this change, as they use "ssemuladd" for "type". gcc/ * config/i386/i386.md (length_immediate): Handle "sse4arg". (prefix): Likewise. (*xop_pcmov_<mode>): Add "mode" attribute. * config/i386/mmx.md (*xop_maskcmp<mode>3): Drop "prefix_data16", "prefix_rep", "prefix_extra", and "length_immediate" attributes. (*xop_maskcmp_uns<mode>3): Likewise. Switch "type" to "sse4arg". (*xop_pcmov_<mode>): Add "mode" attribute. * config/i386/sse.md (xop_pcmov_<mode><avxsizesuffix>): Add "mode" attribute. (xop_maskcmp<mode>3): Drop "prefix_data16", "prefix_rep", "prefix_extra", and "length_immediate" attributes. (xop_maskcmp_uns<mode>3): Likewise. Switch "type" to "sse4arg". (xop_maskcmp_uns2<mode>3): Drop "prefix_data16", "prefix_extra", and "length_immediate" attributes. Switch "type" to "sse4arg". (xop_pcom_tf<mode>3): Likewise. (xop_vpermil2<mode>3): Drop "length_immediate" attribute.
-
Jan Beulich authored
Drop SSE5 leftovers from both its comment and its default calculation. A value of 2 simply cannot occur anymore. Instead extend the comment to mention the use of the attribute in "length_vex", clarifying why "prefix_extra" can actually be meaningful on VEX-encoded insns despite those not having any real prefixes except possibly segment overrides. gcc/ * config/i386/i386.md (prefix_extra): Correct comment. Fold cases yielding 2 into ones yielding 1.
-
Rainer Orth authored
As detailed in LLVM Issue #57624 (https://github.com/llvm/llvm-project/issues/57624), a patch to sanitizer_internal_defs.h broke SPARC stacktraces in the sanitizers. The issue has now been fixed upstream (https://reviews.llvm.org/D156504) and I'd like to cherry-pick that patch. Bootstrapped without regressions on sparc-sun-solaris2.11. 2023-07-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> libsanitizer: * sanitizer_common/sanitizer_stacktrace_sparc.cpp, sanitizer_common/sanitizer_unwind_linux_libcdep.cpp: Cherry-pick llvm-project revision 679c076ae446af81eba81ce9b94203a273d4b88a.
-
Jan Hubicka authored
If loop is ifconverted and later versioning by vectorizer, vectorizer will reuse the scalar loop produced by ifconvert. Curiously enough it does not seem to do so for versions produced by loop distribution while for loop distribution this matters (since since both ldist versions survive to final code) while after ifcvt it does not (since we remove non-vectorized path). This patch fixes associated profile update. Here it is necessary to scale both arms of the conditional according to runtime checks inserted. We got partly right the loop body, but not the preheader block and block after exit. The first is particularly bad since it changes loop iterations estimates. So we now turn 4 original loops: loop 1: iterations by profile: 473.497707 (reliable) entry count:84821 (precise, freq 0.9979) loop 2: iterations by profile: 100.000000 (reliable) entry count:39848881 (precise, freq 468.8104) loop 3: iterations by profile: 100.000000 (reliable) entry count:39848881 (precise, freq 468.8104) loop 4: iterations by profile: 100.999596 (reliable) entry count:84167 (precise, freq 0.9902) Into following loops iterations by profile: 5.312499 (unreliable, maybe flat) entry count:12742188 (guessed, freq 149.9081) vectorized and split loop 1, peeled iterations by profile: 0.009496 (unreliable, maybe flat) entry count:374798 (guessed, freq 4.4094) split loop 1 (last iteration), peeled iterations by profile: 100.000008 (unreliable) entry count:3945039 (guessed, freq 46.4122) scalar version of loop 1 iterations by profile: 100.000007 (unreliable) entry count:7101070 (guessed, freq 83.5420) redundant scalar version of loop 1 which we could eliminate if vectorizer understood ldist iterations by profile: 100.000000 (unreliable) entry count:35505353 (guessed, freq 417.7100) unvectorized loop 2 iterations by profile: 5.312500 (unreliable) entry count:25563855 (guessed, freq 300.7512) vectorized loop 2, not peeled (hits max-peel-insns) iterations by profile: 100.000007 (unreliable) entry count:7101070 (guessed, freq 83.5420) unvectorized loop 3 iterations by profile: 5.312500 (unreliable) entry count:25563855 (guessed, freq 300.7512) vectorized loop 3, not peeled (hits max-peel-insns) iterations by profile: 473.497707 (reliable) entry count:84821 (precise, freq 0.9979) loop 1 iterations by profile: 100.999596 (reliable) entry count:84167 (precise, freq 0.9902) loop 4 With this change we are on 0 profile erros on hmmer benchmark: Pass dump id |dynamic mismatch |overall | |in count |size |time | 172t ch_vect | 0 | 996 | 385812023346 | 173t ifcvt | 71010686 +71010686| 1021 +2.5%| 468361969416 +21.4%| 174t vect | 210830784 +139820098| 1497 +46.6%| 216073467874 -53.9%| 175t dce | 210830784 | 1387 -7.3%| 205273170281 -5.0%| 176t pcom | 210830784 | 1387 | 201722634966 -1.7%| 177t cunroll | 0 -210830784| 1443 +4.0%| 180441501289 -10.5%| 182t ivopts | 0 | 1385 -4.0%| 136412345683 -24.4%| 183t lim | 0 | 1389 +0.3%| 135093950836 -1.0%| 192t reassoc | 0 | 1381 -0.6%| 134778347700 -0.2%| 193t slsr | 0 | 1380 -0.1%| 134738100330 -0.0%| 195t tracer | 0 | 1521 +10.2%| 134738179146 +0.0%| 196t fre | 2680654 +2680654| 1489 -2.1%| 134659672725 -0.1%| 198t dom | 5361308 +2680654| 1473 -1.1%| 134449553658 -0.2%| 201t vrp | 5361308 | 1474 +0.1%| 134489004050 +0.0%| 202t ccp | 5361308 | 1472 -0.1%| 134440752274 -0.0%| 204t dse | 5361308 | 1444 -1.9%| 133802300525 -0.5%| 206t forwprop| 5361308 | 1433 -0.8%| 133542828370 -0.2%| 207t sink | 5361308 | 1431 -0.1%| 133542658728 -0.0%| 211t store-me| 5361308 | 1430 -0.1%| 133542573728 -0.0%| 212t cddce | 5361308 | 1428 -0.1%| 133541776728 -0.0%| 258r expand | 5361308 |----------------|--------------------| 260r into_cfg| 5361308 | 9334 -0.8%| 885820707913 -0.6%| 261r jump | 5361308 | 9330 -0.0%| 885820367913 -0.0%| 265r fwprop1 | 5361308 | 9206 -1.3%| 876756504385 -1.0%| 267r rtl pre | 5361308 | 9210 +0.0%| 876914305953 +0.0%| 269r cprop | 5361308 | 9202 -0.1%| 876756165101 -0.0%| 271r cse_loca| 5361308 | 9198 -0.0%| 876727760821 -0.0%| 272r ce1 | 5361308 | 9126 -0.8%| 875726815885 -0.1%| 276r loop2_in| 5361308 | 9167 +0.4%| 873573110570 -0.2%| 282r cprop | 5361308 | 9095 -0.8%| 871937317262 -0.2%| 284r cse2 | 5361308 | 9091 -0.0%| 871936977978 -0.0%| 285r dse1 | 5361308 | 9067 -0.3%| 871437031602 -0.1%| 290r combine | 5361308 | 9071 +0.0%| 869206278202 -0.3%| 292r stv | 5361308 | 17157 +89.1%| 2111071925708+142.9%| 295r bbpart | 5361308 | 17161 +0.0%| 2111071925708 | 296r outof_cf| 5361308 | 17233 +0.4%| 2111655121000 +0.0%| 297r split1 | 5361308 | 17245 +0.1%| 2111656138852 +0.0%| 306r ira | 5361308 | 19189 +11.3%| 2136098398308 +1.2%| 307r reload | 5361308 | 12101 -36.9%| 981091222830 -54.1%| 309r postrelo| 5361308 | 12019 -0.7%| 978750345475 -0.2%| 310r gcse2 | 5361308 | 12027 +0.1%| 978329108320 -0.0%| 311r split2 | 5361308 | 12023 -0.0%| 978507631352 +0.0%| 312r ree | 5361308 | 12027 +0.0%| 978505414244 -0.0%| 313r cmpelim | 5361308 | 11979 -0.4%| 977531601988 -0.1%| 314r pro_and_| 5361308 | 12091 +0.9%| 977541801988 +0.0%| 315r dse2 | 5361308 | 12091 | 977541801988 | 316r csa | 5361308 | 12087 -0.0%| 977541461988 -0.0%| 317r jump2 | 5361308 | 12039 -0.4%| 977683176572 +0.0%| 318r compgoto| 5361308 | 12039 | 977683176572 | 320r peephole| 5361308 | 12047 +0.1%| 977362727612 -0.0%| 321r ce3 | 5361308 | 12047 | 977362727612 | 323r cprop_ha| 5361308 | 11907 -1.2%| 968751076676 -0.9%| 324r rtl_dce | 5361308 | 11903 -0.0%| 968593274820 -0.0%| 325r bbro | 5361308 | 11883 -0.2%| 967964046644 -0.1%| Bootstrapped/regtested x86_64-linux, plan to commit it tomorrow if there are no complains. gcc/ChangeLog: PR tree-optimization/106293 * tree-vect-loop-manip.cc (vect_loop_versioning): Fix profile update. * tree-vect-loop.cc (vect_transform_loop): Likewise. gcc/testsuite/ChangeLog: PR tree-optimization/106293 * gcc.dg/vect/vect-cond-11.c: Check profile consistency. * gcc.dg/vect/vect-widen-mult-extern-1.c: Check profile consistency.
-
Andrew Pinski authored
Since we already had the infrastructure to optimize `(x == 0) && (x > y)` to false for integer types, this extends the same to pointer types as indirectly requested by PR 96695. OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. gcc/ChangeLog: PR tree-optimization/96695 * match.pd (min_value, max_value): Extend to pointer types too. gcc/testsuite/ChangeLog: PR tree-optimization/96695 * gcc.dg/pr96695-1.c: New test. * gcc.dg/pr96695-10.c: New test. * gcc.dg/pr96695-11.c: New test. * gcc.dg/pr96695-12.c: New test. * gcc.dg/pr96695-2.c: New test. * gcc.dg/pr96695-3.c: New test. * gcc.dg/pr96695-4.c: New test. * gcc.dg/pr96695-5.c: New test. * gcc.dg/pr96695-6.c: New test. * gcc.dg/pr96695-7.c: New test. * gcc.dg/pr96695-8.c: New test. * gcc.dg/pr96695-9.c: New test.
-
GCC Administrator authored
-
- Aug 06, 2023
-
-
Roger Sayle authored
My apologies (again), I managed to mess up the 64-bit version of the test case for PR 110792. Unlike the 32-bit version, the 64-bit case contains exactly the same load instructions, just in a different order making the correct and incorrect behaviours impossible to distinguish with a scan-assembler-not. Somewhere between checking that this test failed in a clean tree without the patch, and getting the escaping correct, I'd failed to notice that this also FAILs in the patched tree. Doh! Instead of removing the test completely, I've left it as a compilation test. The original fix is tested by the 32-bit test case. Committed to mainline as obvious. Sorry for the incovenience. 2023-08-06 Roger Sayle <roger@nextmovesoftware.com> gcc/testsuite/ChangeLog PR target/110792 * gcc.target/i386/pr110792.c: Remove dg-final scan-assembler-not.
-
Jan Hubicka authored
This is needed to avoid impossible threading update in vectorizer testcase, but should also reflect reality on most CPUs we care about. gcc/ChangeLog: * config/i386/cpuid.h (__get_cpuid_count, __get_cpuid_max): Add __builtin_expect that CPU likely supports cpuid.
-
Jan Hubicka authored
This prevents useless loop distribiton produced in hmmer. With FDO we now correctly work out that the loop created for last iteraiton is not going to iterate however loop distribution still produces a verioned loop that has no chance to survive loop vectorizer since we only keep distributed loops when loop vectorization suceeds and it requires number of (header) iterations to exceed the vectorization factor. gcc/ChangeLog: * tree-loop-distribution.cc (loop_distribution::execute): Disable distribution for loops with estimated iterations 0.
-
Jan Hubicka authored
Epilogue peeling expects the scalar loop to have same number of executions as the vector loop which is true at the beggining of vectorization. However if the epilogues are vectorized, this is no longer the case. In this situation the loop preheader is replaced by new guard code with correct profile, however loop body is left unscaled. This leads to loop that exists more often then it is entered. This patch add slogic to scale the frequencies down and also to fix profile of original preheader where necesary. Bootstrapped/regtested x86_64-linux, comitted. gcc/ChangeLog: * tree-vect-loop-manip.cc (vect_do_peeling): Fix profile update of peeled epilogues. gcc/testsuite/ChangeLog: * gcc.dg/vect/vect-bitfield-read-1.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-2.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-3.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-4.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-5.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-6.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-7.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-1.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-2.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-3.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-4.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-5.c: Check profile consistency. * gcc.dg/vect/vect-epilogues-2.c: Check profile consistency. * gcc.dg/vect/vect-epilogues.c: Check profile consistency. * gcc.dg/vect/vect-mask-store-move-1.c: Check profile consistency.
-
François Dumont authored
libstdc++-v3/ChangeLog: * config/abi/pre/gnu-versioned-namespace.ver: Add __cxa_call_terminate symbol export.
-
GCC Administrator authored
-
- Aug 05, 2023
-
-
Gaius Mulley authored
This patch completes the implementation of the ISO module SysClock.mod. Three new testcases are provided. wrapclock.{cc,def} are new support files providing access to clock_settime, clock_gettime and glibc timezone variables. gcc/m2/ChangeLog: PR modula2/110779 * gm2-libs-iso/SysClock.mod: Re-implement using wrapclock. * gm2-libs-iso/wrapclock.def: New file. libgm2/ChangeLog: PR modula2/110779 * config.h.in: Regenerate. * configure: Regenerate. * configure.ac (GM2_CHECK_LIB): Check for clock_gettime and clock_settime. * libm2iso/Makefile.am (M2DEFS): Add wrapclock.def. * libm2iso/Makefile.in: Regenerate. * libm2iso/wraptime.cc: Replace HAVE_TIMEVAL with HAVE_STRUCT_TIMEVAL. * libm2iso/wrapclock.cc: New file. gcc/testsuite/ChangeLog: PR modula2/110779 * gm2/iso/run/pass/m2date.mod: New test. * gm2/iso/run/pass/testclock.mod: New test. * gm2/iso/run/pass/testclock2.mod: New test. Signed-off-by:
Gaius Mulley <gaiusmod2@gmail.com>
-
Martin Uecker authored
To avoid false positivies, tune the warnings for parameters declared as arrays with size expressions. Do not warn when more bounds are specified in the declaration than before. PR c/98536 gcc/c-family/: * c-warn.cc (warn_parm_array_mismatch): Do not warn if more bounds are specified. gcc/testsuite: * gcc.dg/Wvla-parameter-4.c: Adapt test. * gcc.dg/attr-access-2.c: Adapt test.
-
Martin Uecker authored
To avoid false diagnostics, use c_inhibit_evaluation_warnings when a generic association is known to not match during parsing. We may still generate false positives if the default branch comes earler than a specific association that matches. PR c/68193 PR c/97100 PR c/110703 gcc/c/: * c-parser.cc (c_parser_generic_selection): Inhibit evaluation warnings branches that are known not be taken during parsing. gcc/testsuite/ChangeLog: * gcc.dg/pr68193.c: New test.
-
GCC Administrator authored
-
- Aug 04, 2023
-
-
Xiao Zeng authored
This patch recognizes Zicond patterns when the select pattern with condition eq or neq to 0 (using eq as an example), namely: 1 rd = (rs2 == 0) ? non-imm : 0 2 rd = (rs2 == 0) ? non-imm : non-imm 3 rd = (rs2 == 0) ? reg : non-imm 4 rd = (rs2 == 0) ? reg : reg gcc/ChangeLog: * config/riscv/riscv.cc (riscv_expand_conditional_move): Recognize more Zicond patterns. Fix whitespace typo. (riscv_rtx_costs): Remove accidental code duplication. Co-authored-by:
Jeff Law <jlaw@ventanamicro.com>
-
David Malcolm authored
This patch makes -fanalyzer make use of the function attribute "alloc_size", allowing -fanalyzer to emit -Wanalyzer-allocation-size, -Wanalyzer-out-of-bounds, and -Wanalyzer-tainted-allocation-size on execution paths involving allocations using such functions. gcc/analyzer/ChangeLog: PR analyzer/110426 * bounds-checking.cc (region_model::check_region_bounds): Handle symbolic base regions. * call-details.cc: Include "stringpool.h" and "attribs.h". (call_details::lookup_function_attribute): New function. * call-details.h (call_details::lookup_function_attribute): New function decl. * region-model-manager.cc (region_model_manager::maybe_fold_binop): Add reference to PR analyzer/110902. * region-model-reachability.cc (reachable_regions::handle_sval): Add symbolic regions for pointers that are conjured svalues for the LHS of a stmt. * region-model.cc (region_model::canonicalize): Purge dynamic extents for regions that aren't referenced. (get_result_size_in_bytes): New function. (region_model::on_call_pre): Use get_result_size_in_bytes and potentially set the dynamic extents of the region pointed to by the return value. (region_model::deref_rvalue): Add param "add_nonnull_constraint" and use it to conditionalize adding the constraint. (pending_diagnostic_subclass::dubious_allocation_size): Add "stmt" param to both ctors and use it to initialize new "m_stmt" field. (pending_diagnostic_subclass::operator==): Use m_stmt; don't use m_lhs or m_rhs. (pending_diagnostic_subclass::m_stmt): New field. (region_model::check_region_size): Generalize to any kind of pointer svalue by using deref_rvalue rather than checking for region_svalue. Pass stmt to dubious_allocation_size ctor. * region-model.h (region_model::deref_rvalue): Add param "add_nonnull_constraint". * svalue.cc (conjured_svalue::lhs_value_p): New function. * svalue.h (conjured_svalue::lhs_value_p): New decl. gcc/testsuite/ChangeLog: PR analyzer/110426 * gcc.dg/analyzer/allocation-size-1.c: Update expected message to reflect consolidation of size and assignment into a single event. * gcc.dg/analyzer/allocation-size-2.c: Likewise. * gcc.dg/analyzer/allocation-size-3.c: Likewise. * gcc.dg/analyzer/allocation-size-4.c: Likewise. * gcc.dg/analyzer/allocation-size-multiline-1.c: Likewise. * gcc.dg/analyzer/allocation-size-multiline-2.c: Likewise. * gcc.dg/analyzer/allocation-size-multiline-3.c: Likewise. * gcc.dg/analyzer/attr-alloc_size-1.c: New test. * gcc.dg/analyzer/attr-alloc_size-2.c: New test. * gcc.dg/analyzer/attr-alloc_size-3.c: New test. * gcc.dg/analyzer/explode-4.c: New test. * gcc.dg/analyzer/taint-size-1.c: Add test coverage for __attribute__ alloc_size. Signed-off-by:
David Malcolm <dmalcolm@redhat.com>
-
David Malcolm authored
gcc/analyzer/ChangeLog: * svalue.cc (region_svalue::dump_to_pp): Support NULL type. (constant_svalue::dump_to_pp): Likewise. (initial_svalue::dump_to_pp): Likewise. (conjured_svalue::dump_to_pp): Likewise. Fix missing print of the type. Signed-off-by:
David Malcolm <dmalcolm@redhat.com>
-
Yan Simonaytes authored
As mentioned in PR 110202, GCC may be presented with input where control word of the VPTERNLOG intrinsic implies that some of its operands do not affect the result. In that case, we can eliminate redundant operands of the instruction by substituting any other operand in their place. This removes false dependencies. For instance, instead of (252 = 0xfc = _MM_TERNLOG_A | _MM_TERNLOG_B) vpternlogq $252, %zmm2, %zmm1, %zmm0 emit vpternlogq $252, %zmm0, %zmm1, %zmm0 When VPTERNLOG is invariant w.r.t first and second operands, and the third operand is memory, load memory into the output operand first, i.e. instead of (85 = 0x55 = ~_MM_TERNLOG_C) vpternlogq $85, (%rdi), %zmm1, %zmm0 emit vmovdqa64 (%rdi), %zmm0 vpternlogq $85, %zmm0, %zmm0, %zmm0 gcc/ChangeLog: PR target/110202 * config/i386/i386-protos.h (vpternlog_redundant_operand_mask): Declare. (substitute_vpternlog_operands): Declare. * config/i386/i386.cc (vpternlog_redundant_operand_mask): New helper. (substitute_vpternlog_operands): New function. Use them... * config/i386/sse.md: ... here in new VPTERNLOG define_splits. gcc/testsuite/ChangeLog: PR target/110202 * gcc.target/i386/invariant-ternlog-1.c: New test. * gcc.target/i386/invariant-ternlog-2.c: New test.
-
Roger Sayle authored
This patch is inspired by Jakub's work on PR rtl-optimization/110717. The bitfield example described in comment #2, looks like: struct S { __int128 a : 69; }; unsigned type bar (struct S *p) { return p->a; } which on x86_64 with -O2 currently generates: bar: movzbl 8(%rdi), %ecx movq (%rdi), %rax andl $31, %ecx movq %rcx, %rdx salq $59, %rdx sarq $59, %rdx ret The ANDL $31 is interesting... we first extract an unsigned 69-bit bitfield by masking/clearing the top bits of the most significant word, and then it gets sign-extended, by left shifting and arithmetic right shifting. Obviously, this bit-wise AND is redundant, for signed bit-fields, we don't require these bits to be cleared, if we're about to set them appropriately. This patch eliminates this redundancy in the middle-end, during RTL expansion, but extending the extract_bit_field APIs so that the integer UNSIGNEDP argument takes a special value; 0 indicates the field should be sign extended, 1 (any non-zero value) indicates the field should be zero extended, but -1 indicates a third option, that we don't care how or whether the field is extended. By passing and checking this sentinel value at the appropriate places we avoid the useless bit masking (on all targets). For the test case above, with this patch we now generate: bar: movzbl 8(%rdi), %ecx movq (%rdi), %rax movq %rcx, %rdx salq $59, %rdx sarq $59, %rdx ret 2023-08-04 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * expmed.cc (extract_bit_field_1): Document that an UNSIGNEDP value of -1 is equivalent to don't care. (extract_integral_bit_field): Indicate that we don't require the most significant word to be zero extended, if we're about to sign extend it. (extract_fixed_bit_field_1): Document that an UNSIGNEDP value of -1 is equivalent to don't care. Don't clear the most significant bits with AND mask when UNSIGNEDP is -1. gcc/testsuite/ChangeLog * gcc.target/i386/pr110717-2.c: New test case.
-
Roger Sayle authored
This patch is the final piece in the series to improve the ABI issues affecting PR 88873. The previous patches tackled inserting DFmode values into V2DFmode registers, by introducing insvti_{low,high}part patterns. This patch improves the extraction of DFmode values from V2DFmode registers via TImode intermediates. I'd initially thought this would require new extvti_{low,high}part patterns to be defined, but all that's required is to recognize that the SUBREG idioms produced by combine are equivalent to (forms of) vec_select patterns. The target-independent middle-end can't be sure that the appropriate vec_select instruction exists on the target, hence doesn't canonicalize a SUBREG of a vector mode as a vec_select, but the backend can provide a define_split stating where and when this is useful, for example, considering whether the operand is in memory, or whether !TARGET_SSE_MATH and the destination is i387. For pr88873.c, gcc -O2 -march=cascadelake currently generates: foo: vpunpcklqdq %xmm3, %xmm2, %xmm7 vpunpcklqdq %xmm1, %xmm0, %xmm6 vpunpcklqdq %xmm5, %xmm4, %xmm2 vmovdqa %xmm7, -24(%rsp) vmovdqa %xmm6, %xmm1 movq -16(%rsp), %rax vpinsrq $1, %rax, %xmm7, %xmm4 vmovapd %xmm4, %xmm6 vfmadd132pd %xmm1, %xmm2, %xmm6 vmovapd %xmm6, -24(%rsp) vmovsd -16(%rsp), %xmm1 vmovsd -24(%rsp), %xmm0 ret with this patch, we now generate: foo: vpunpcklqdq %xmm1, %xmm0, %xmm6 vpunpcklqdq %xmm3, %xmm2, %xmm7 vpunpcklqdq %xmm5, %xmm4, %xmm2 vmovdqa %xmm6, %xmm1 vfmadd132pd %xmm7, %xmm2, %xmm1 vmovsd %xmm1, %xmm1, %xmm0 vunpckhpd %xmm1, %xmm1, %xmm1 ret The improvement is even more dramatic when compared to the original 29 instructions shown in comment #8. GCC 13, for example, required 12 transfers to/from memory. 2023-08-04 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/i386/sse.md (define_split): Convert highpart:DF extract from V2DFmode register into a sse2_storehpd instruction. (define_split): Likewise, convert lowpart:DF extract from V2DF register into a sse2_storelpd instruction. gcc/testsuite/ChangeLog * gcc.target/i386/pr88873.c: Tweak to check for improved code.
-
Qing Zhao authored
'-Wflex-array-member-not-at-end (C and C++ only)' Warn when a structure containing a C99 flexible array member as the last field is not at the end of another structure. This warning warns e.g. about struct flex { int length; char data[]; }; struct mid_flex { int m; struct flex flex_data; int n; }; gcc/ChangeLog: * doc/invoke.texi (-Wflex-array-member-not-at-end): Document new option.
-
Vladimir N. Makarov authored
For the test case LRA generates wrong code for AVR cpymem_qi insn: (insn 16 15 17 3 (parallel [ (set (mem:BLK (reg:HI 26 r26) [0 A8]) (mem:BLK (reg:HI 30 r30) [0 A8])) (unspec [ (const_int 0 [0]) ] UNSPEC_CPYMEM) (use (reg:QI 52)) (clobber (reg:HI 26 r26)) (clobber (reg:HI 30 r30)) (clobber (reg:QI 0 r0)) (clobber (reg:QI 52)) ]) "t.c":16:22 132 {cpymem_qi} The insn gets the same value in r26 and r30. The culprit is clobbering r30 and using r30 as input. For such situation LRA wrongly assumes that r30 does not live before the insn. The patch is fixing it. gcc/ChangeLog: * lra-lives.cc (process_bb_lives): Check input insn pattern hard regs against early clobber hard regs. gcc/testsuite/ChangeLog: * gcc.target/avr/lra-cpymem_qi.c: New.
-
Tamar Christina authored
The support for early break vectorization breaks lots of scan vect and slp testcases because they assume that loops with abort () in them cannot be vectorized. Additionally it breaks the point of having a scalar loop to check the output of the vectorizer if that loop is also vectorized. For that reason this adds vectorized using this patch series. FWIW, none of these tests were failing to vectorize or run before the pragma. The tests that did point to some issues were copies to the early break test suit as well. gcc/testsuite/ChangeLog: * g++.dg/vect/pr84556.cc: Add novector pragma. * g++.dg/vect/simd-1.cc: Add novector pragma. * g++.dg/vect/simd-2.cc: Add novector pragma. * g++.dg/vect/simd-3.cc: Add novector pragma. * g++.dg/vect/simd-4.cc: Add novector pragma. * g++.dg/vect/simd-5.cc: Add novector pragma. * g++.dg/vect/simd-6.cc: Add novector pragma. * g++.dg/vect/simd-7.cc: Add novector pragma. * g++.dg/vect/simd-8.cc: Add novector pragma. * g++.dg/vect/simd-9.cc: Add novector pragma. * g++.dg/vect/simd-clone-6.cc: Add novector pragma. * gcc.dg/vect/O3-pr70130.c: Add novector pragma. * gcc.dg/vect/Os-vect-95.c: Add novector pragma. * gcc.dg/vect/bb-slp-1.c: Add novector pragma. * gcc.dg/vect/bb-slp-16.c: Add novector pragma. * gcc.dg/vect/bb-slp-2.c: Add novector pragma. * gcc.dg/vect/bb-slp-24.c: Add novector pragma. * gcc.dg/vect/bb-slp-25.c: Add novector pragma. * gcc.dg/vect/bb-slp-26.c: Add novector pragma. * gcc.dg/vect/bb-slp-27.c: Add novector pragma. * gcc.dg/vect/bb-slp-28.c: Add novector pragma. * gcc.dg/vect/bb-slp-29.c: Add novector pragma. * gcc.dg/vect/bb-slp-42.c: Add novector pragma. * gcc.dg/vect/bb-slp-cond-1.c: Add novector pragma. * gcc.dg/vect/bb-slp-over-widen-1.c: Add novector pragma. * gcc.dg/vect/bb-slp-over-widen-2.c: Add novector pragma. * gcc.dg/vect/bb-slp-pattern-1.c: Add novector pragma. * gcc.dg/vect/bb-slp-pattern-2.c: Add novector pragma. * gcc.dg/vect/bb-slp-pow-1.c: Add novector pragma. * gcc.dg/vect/bb-slp-pr101615-2.c: Add novector pragma. * gcc.dg/vect/bb-slp-pr65935.c: Add novector pragma. * gcc.dg/vect/bb-slp-subgroups-1.c: Add novector pragma. * gcc.dg/vect/costmodel/i386/costmodel-vect-31.c: Add novector pragma. * gcc.dg/vect/costmodel/i386/costmodel-vect-33.c: Add novector pragma. * gcc.dg/vect/costmodel/i386/costmodel-vect-68.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-slp-33.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-slp-34.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-31b.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-31c.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-33.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-68a.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-68b.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-68c.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-76a.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-76c.c: Add novector pragma. * gcc.dg/vect/costmodel/ppc/costmodel-vect-outer-fir.c: Add novector pragma. * gcc.dg/vect/costmodel/x86_64/costmodel-vect-31.c: Add novector pragma. * gcc.dg/vect/costmodel/x86_64/costmodel-vect-33.c: Add novector pragma. * gcc.dg/vect/costmodel/x86_64/costmodel-vect-68.c: Add novector pragma. * gcc.dg/vect/fast-math-bb-slp-call-1.c: Add novector pragma. * gcc.dg/vect/fast-math-bb-slp-call-2.c: Add novector pragma. * gcc.dg/vect/fast-math-vect-call-1.c: Add novector pragma. * gcc.dg/vect/fast-math-vect-call-2.c: Add novector pragma. * gcc.dg/vect/fast-math-vect-complex-3.c: Add novector pragma. * gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c: Add novector pragma. * gcc.dg/vect/no-scevccp-noreassoc-outer-1.c: Add novector pragma. * gcc.dg/vect/no-scevccp-noreassoc-outer-2.c: Add novector pragma. * gcc.dg/vect/no-scevccp-noreassoc-outer-3.c: Add novector pragma. * gcc.dg/vect/no-scevccp-noreassoc-outer-5.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-10.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-10a.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-10b.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-11.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-12.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-15.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-16.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-17.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-18.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-19.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-20.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-21.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-22.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-3.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-4.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-5.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-6-global.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-6.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-7.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-8.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-9.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-9a.c: Add novector pragma. * gcc.dg/vect/no-scevccp-outer-9b.c: Add novector pragma. * gcc.dg/vect/no-scevccp-slp-30.c: Add novector pragma. * gcc.dg/vect/no-scevccp-slp-31.c: Add novector pragma. * gcc.dg/vect/no-scevccp-vect-iv-2.c: Add novector pragma. * gcc.dg/vect/no-section-anchors-vect-31.c: Add novector pragma. * gcc.dg/vect/no-section-anchors-vect-34.c: Add novector pragma. * gcc.dg/vect/no-section-anchors-vect-36.c: Add novector pragma. * gcc.dg/vect/no-section-anchors-vect-64.c: Add novector pragma. * gcc.dg/vect/no-section-anchors-vect-65.c: Add novector pragma. * gcc.dg/vect/no-section-anchors-vect-66.c: Add novector pragma. * gcc.dg/vect/no-section-anchors-vect-68.c: Add novector pragma. * gcc.dg/vect/no-section-anchors-vect-69.c: Add novector pragma. * gcc.dg/vect/no-section-anchors-vect-outer-4h.c: Add novector pragma. * gcc.dg/vect/no-trapping-math-2.c: Add novector pragma. * gcc.dg/vect/no-trapping-math-vect-111.c: Add novector pragma. * gcc.dg/vect/no-trapping-math-vect-ifcvt-11.c: Add novector pragma. * gcc.dg/vect/no-trapping-math-vect-ifcvt-12.c: Add novector pragma. * gcc.dg/vect/no-trapping-math-vect-ifcvt-13.c: Add novector pragma. * gcc.dg/vect/no-trapping-math-vect-ifcvt-14.c: Add novector pragma. * gcc.dg/vect/no-trapping-math-vect-ifcvt-15.c: Add novector pragma. * gcc.dg/vect/no-tree-dom-vect-bug.c: Add novector pragma. * gcc.dg/vect/no-tree-pre-slp-29.c: Add novector pragma. * gcc.dg/vect/no-vfa-pr29145.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-101.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-102.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-102a.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-37.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-43.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-45.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-49.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-51.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-53.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-57.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-61.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-79.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-depend-1.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-depend-2.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-depend-3.c: Add novector pragma. * gcc.dg/vect/no-vfa-vect-dv-2.c: Add novector pragma. * gcc.dg/vect/pr101445.c: Add novector pragma. * gcc.dg/vect/pr103581.c: Add novector pragma. * gcc.dg/vect/pr105219.c: Add novector pragma. * gcc.dg/vect/pr108608.c: Add novector pragma. * gcc.dg/vect/pr18400.c: Add novector pragma. * gcc.dg/vect/pr18536.c: Add novector pragma. * gcc.dg/vect/pr20122.c: Add novector pragma. * gcc.dg/vect/pr25413.c: Add novector pragma. * gcc.dg/vect/pr30784.c: Add novector pragma. * gcc.dg/vect/pr37539.c: Add novector pragma. * gcc.dg/vect/pr40074.c: Add novector pragma. * gcc.dg/vect/pr45752.c: Add novector pragma. * gcc.dg/vect/pr45902.c: Add novector pragma. * gcc.dg/vect/pr46009.c: Add novector pragma. * gcc.dg/vect/pr48172.c: Add novector pragma. * gcc.dg/vect/pr51074.c: Add novector pragma. * gcc.dg/vect/pr51581-3.c: Add novector pragma. * gcc.dg/vect/pr51581-4.c: Add novector pragma. * gcc.dg/vect/pr53185-2.c: Add novector pragma. * gcc.dg/vect/pr56918.c: Add novector pragma. * gcc.dg/vect/pr56920.c: Add novector pragma. * gcc.dg/vect/pr56933.c: Add novector pragma. * gcc.dg/vect/pr57705.c: Add novector pragma. * gcc.dg/vect/pr57741-2.c: Add novector pragma. * gcc.dg/vect/pr57741-3.c: Add novector pragma. * gcc.dg/vect/pr59591-1.c: Add novector pragma. * gcc.dg/vect/pr59591-2.c: Add novector pragma. * gcc.dg/vect/pr59594.c: Add novector pragma. * gcc.dg/vect/pr59984.c: Add novector pragma. * gcc.dg/vect/pr60276.c: Add novector pragma. * gcc.dg/vect/pr61194.c: Add novector pragma. * gcc.dg/vect/pr61680.c: Add novector pragma. * gcc.dg/vect/pr62021.c: Add novector pragma. * gcc.dg/vect/pr63341-2.c: Add novector pragma. * gcc.dg/vect/pr64252.c: Add novector pragma. * gcc.dg/vect/pr64404.c: Add novector pragma. * gcc.dg/vect/pr64421.c: Add novector pragma. * gcc.dg/vect/pr64493.c: Add novector pragma. * gcc.dg/vect/pr64495.c: Add novector pragma. * gcc.dg/vect/pr66251.c: Add novector pragma. * gcc.dg/vect/pr66253.c: Add novector pragma. * gcc.dg/vect/pr68502-1.c: Add novector pragma. * gcc.dg/vect/pr68502-2.c: Add novector pragma. * gcc.dg/vect/pr69820.c: Add novector pragma. * gcc.dg/vect/pr70021.c: Add novector pragma. * gcc.dg/vect/pr70354-1.c: Add novector pragma. * gcc.dg/vect/pr70354-2.c: Add novector pragma. * gcc.dg/vect/pr71259.c: Add novector pragma. * gcc.dg/vect/pr78005.c: Add novector pragma. * gcc.dg/vect/pr78558.c: Add novector pragma. * gcc.dg/vect/pr80815-2.c: Add novector pragma. * gcc.dg/vect/pr80815-3.c: Add novector pragma. * gcc.dg/vect/pr80928.c: Add novector pragma. * gcc.dg/vect/pr81410.c: Add novector pragma. * gcc.dg/vect/pr81633.c: Add novector pragma. * gcc.dg/vect/pr81740-1.c: Add novector pragma. * gcc.dg/vect/pr81740-2.c: Add novector pragma. * gcc.dg/vect/pr85586.c: Add novector pragma. * gcc.dg/vect/pr87288-1.c: Add novector pragma. * gcc.dg/vect/pr87288-2.c: Add novector pragma. * gcc.dg/vect/pr87288-3.c: Add novector pragma. * gcc.dg/vect/pr88903-1.c: Add novector pragma. * gcc.dg/vect/pr88903-2.c: Add novector pragma. * gcc.dg/vect/pr90018.c: Add novector pragma. * gcc.dg/vect/pr92420.c: Add novector pragma. * gcc.dg/vect/pr94994.c: Add novector pragma. * gcc.dg/vect/pr96783-1.c: Add novector pragma. * gcc.dg/vect/pr96783-2.c: Add novector pragma. * gcc.dg/vect/pr97081-2.c: Add novector pragma. * gcc.dg/vect/pr97558-2.c: Add novector pragma. * gcc.dg/vect/pr97678.c: Add novector pragma. * gcc.dg/vect/section-anchors-pr27770.c: Add novector pragma. * gcc.dg/vect/section-anchors-vect-69.c: Add novector pragma. * gcc.dg/vect/slp-1.c: Add novector pragma. * gcc.dg/vect/slp-10.c: Add novector pragma. * gcc.dg/vect/slp-11a.c: Add novector pragma. * gcc.dg/vect/slp-11b.c: Add novector pragma. * gcc.dg/vect/slp-11c.c: Add novector pragma. * gcc.dg/vect/slp-12a.c: Add novector pragma. * gcc.dg/vect/slp-12b.c: Add novector pragma. * gcc.dg/vect/slp-12c.c: Add novector pragma. * gcc.dg/vect/slp-13-big-array.c: Add novector pragma. * gcc.dg/vect/slp-13.c: Add novector pragma. * gcc.dg/vect/slp-14.c: Add novector pragma. * gcc.dg/vect/slp-15.c: Add novector pragma. * gcc.dg/vect/slp-16.c: Add novector pragma. * gcc.dg/vect/slp-17.c: Add novector pragma. * gcc.dg/vect/slp-18.c: Add novector pragma. * gcc.dg/vect/slp-19a.c: Add novector pragma. * gcc.dg/vect/slp-19b.c: Add novector pragma. * gcc.dg/vect/slp-19c.c: Add novector pragma. * gcc.dg/vect/slp-2.c: Add novector pragma. * gcc.dg/vect/slp-20.c: Add novector pragma. * gcc.dg/vect/slp-21.c: Add novector pragma. * gcc.dg/vect/slp-22.c: Add novector pragma. * gcc.dg/vect/slp-23.c: Add novector pragma. * gcc.dg/vect/slp-24-big-array.c: Add novector pragma. * gcc.dg/vect/slp-24.c: Add novector pragma. * gcc.dg/vect/slp-25.c: Add novector pragma. * gcc.dg/vect/slp-26.c: Add novector pragma. * gcc.dg/vect/slp-28.c: Add novector pragma. * gcc.dg/vect/slp-3-big-array.c: Add novector pragma. * gcc.dg/vect/slp-3.c: Add novector pragma. * gcc.dg/vect/slp-33.c: Add novector pragma. * gcc.dg/vect/slp-34-big-array.c: Add novector pragma. * gcc.dg/vect/slp-34.c: Add novector pragma. * gcc.dg/vect/slp-35.c: Add novector pragma. * gcc.dg/vect/slp-37.c: Add novector pragma. * gcc.dg/vect/slp-4-big-array.c: Add novector pragma. * gcc.dg/vect/slp-4.c: Add novector pragma. * gcc.dg/vect/slp-41.c: Add novector pragma. * gcc.dg/vect/slp-43.c: Add novector pragma. * gcc.dg/vect/slp-45.c: Add novector pragma. * gcc.dg/vect/slp-46.c: Add novector pragma. * gcc.dg/vect/slp-47.c: Add novector pragma. * gcc.dg/vect/slp-48.c: Add novector pragma. * gcc.dg/vect/slp-49.c: Add novector pragma. * gcc.dg/vect/slp-5.c: Add novector pragma. * gcc.dg/vect/slp-6.c: Add novector pragma. * gcc.dg/vect/slp-7.c: Add novector pragma. * gcc.dg/vect/slp-8.c: Add novector pragma. * gcc.dg/vect/slp-9.c: Add novector pragma. * gcc.dg/vect/slp-cond-1.c: Add novector pragma. * gcc.dg/vect/slp-cond-2-big-array.c: Add novector pragma. * gcc.dg/vect/slp-cond-2.c: Add novector pragma. * gcc.dg/vect/slp-cond-3.c: Add novector pragma. * gcc.dg/vect/slp-cond-4.c: Add novector pragma. * gcc.dg/vect/slp-cond-5.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-1.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-10.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-11-big-array.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-11.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-12.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-2.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-3.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-4.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-5.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-6.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-7.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-8.c: Add novector pragma. * gcc.dg/vect/slp-multitypes-9.c: Add novector pragma. * gcc.dg/vect/slp-perm-1.c: Add novector pragma. * gcc.dg/vect/slp-perm-10.c: Add novector pragma. * gcc.dg/vect/slp-perm-11.c: Add novector pragma. * gcc.dg/vect/slp-perm-12.c: Add novector pragma. * gcc.dg/vect/slp-perm-2.c: Add novector pragma. * gcc.dg/vect/slp-perm-3.c: Add novector pragma. * gcc.dg/vect/slp-perm-4.c: Add novector pragma. * gcc.dg/vect/slp-perm-5.c: Add novector pragma. * gcc.dg/vect/slp-perm-6.c: Add novector pragma. * gcc.dg/vect/slp-perm-7.c: Add novector pragma. * gcc.dg/vect/slp-perm-8.c: Add novector pragma. * gcc.dg/vect/slp-perm-9.c: Add novector pragma. * gcc.dg/vect/slp-widen-mult-half.c: Add novector pragma. * gcc.dg/vect/slp-widen-mult-s16.c: Add novector pragma. * gcc.dg/vect/slp-widen-mult-u8.c: Add novector pragma. * gcc.dg/vect/vect-100.c: Add novector pragma. * gcc.dg/vect/vect-103.c: Add novector pragma. * gcc.dg/vect/vect-104.c: Add novector pragma. * gcc.dg/vect/vect-105-big-array.c: Add novector pragma. * gcc.dg/vect/vect-105.c: Add novector pragma. * gcc.dg/vect/vect-106.c: Add novector pragma. * gcc.dg/vect/vect-107.c: Add novector pragma. * gcc.dg/vect/vect-108.c: Add novector pragma. * gcc.dg/vect/vect-109.c: Add novector pragma. * gcc.dg/vect/vect-11.c: Add novector pragma. * gcc.dg/vect/vect-110.c: Add novector pragma. * gcc.dg/vect/vect-113.c: Add novector pragma. * gcc.dg/vect/vect-114.c: Add novector pragma. * gcc.dg/vect/vect-115.c: Add novector pragma. * gcc.dg/vect/vect-116.c: Add novector pragma. * gcc.dg/vect/vect-117.c: Add novector pragma. * gcc.dg/vect/vect-11a.c: Add novector pragma. * gcc.dg/vect/vect-12.c: Add novector pragma. * gcc.dg/vect/vect-122.c: Add novector pragma. * gcc.dg/vect/vect-124.c: Add novector pragma. * gcc.dg/vect/vect-13.c: Add novector pragma. * gcc.dg/vect/vect-14.c: Add novector pragma. * gcc.dg/vect/vect-15-big-array.c: Add novector pragma. * gcc.dg/vect/vect-15.c: Add novector pragma. * gcc.dg/vect/vect-17.c: Add novector pragma. * gcc.dg/vect/vect-18.c: Add novector pragma. * gcc.dg/vect/vect-19.c: Add novector pragma. * gcc.dg/vect/vect-2-big-array.c: Add novector pragma. * gcc.dg/vect/vect-2.c: Add novector pragma. * gcc.dg/vect/vect-20.c: Add novector pragma. * gcc.dg/vect/vect-21.c: Add novector pragma. * gcc.dg/vect/vect-22.c: Add novector pragma. * gcc.dg/vect/vect-23.c: Add novector pragma. * gcc.dg/vect/vect-24.c: Add novector pragma. * gcc.dg/vect/vect-25.c: Add novector pragma. * gcc.dg/vect/vect-26.c: Add novector pragma. * gcc.dg/vect/vect-27.c: Add novector pragma. * gcc.dg/vect/vect-28.c: Add novector pragma. * gcc.dg/vect/vect-29.c: Add novector pragma. * gcc.dg/vect/vect-3.c: Add novector pragma. * gcc.dg/vect/vect-30.c: Add novector pragma. * gcc.dg/vect/vect-31-big-array.c: Add novector pragma. * gcc.dg/vect/vect-31.c: Add novector pragma. * gcc.dg/vect/vect-32-big-array.c: Add novector pragma. * gcc.dg/vect/vect-32.c: Add novector pragma. * gcc.dg/vect/vect-33-big-array.c: Add novector pragma. * gcc.dg/vect/vect-33.c: Add novector pragma. * gcc.dg/vect/vect-34-big-array.c: Add novector pragma. * gcc.dg/vect/vect-34.c: Add novector pragma. * gcc.dg/vect/vect-35-big-array.c: Add novector pragma. * gcc.dg/vect/vect-35.c: Add novector pragma. * gcc.dg/vect/vect-36-big-array.c: Add novector pragma. * gcc.dg/vect/vect-36.c: Add novector pragma. * gcc.dg/vect/vect-38.c: Add novector pragma. * gcc.dg/vect/vect-4.c: Add novector pragma. * gcc.dg/vect/vect-40.c: Add novector pragma. * gcc.dg/vect/vect-42.c: Add novector pragma. * gcc.dg/vect/vect-44.c: Add novector pragma. * gcc.dg/vect/vect-46.c: Add novector pragma. * gcc.dg/vect/vect-48.c: Add novector pragma. * gcc.dg/vect/vect-5.c: Add novector pragma. * gcc.dg/vect/vect-50.c: Add novector pragma. * gcc.dg/vect/vect-52.c: Add novector pragma. * gcc.dg/vect/vect-54.c: Add novector pragma. * gcc.dg/vect/vect-56.c: Add novector pragma. * gcc.dg/vect/vect-58.c: Add novector pragma. * gcc.dg/vect/vect-6-big-array.c: Add novector pragma. * gcc.dg/vect/vect-6.c: Add novector pragma. * gcc.dg/vect/vect-60.c: Add novector pragma. * gcc.dg/vect/vect-62.c: Add novector pragma. * gcc.dg/vect/vect-63.c: Add novector pragma. * gcc.dg/vect/vect-64.c: Add novector pragma. * gcc.dg/vect/vect-65.c: Add novector pragma. * gcc.dg/vect/vect-66.c: Add novector pragma. * gcc.dg/vect/vect-67.c: Add novector pragma. * gcc.dg/vect/vect-68.c: Add novector pragma. * gcc.dg/vect/vect-7.c: Add novector pragma. * gcc.dg/vect/vect-70.c: Add novector pragma. * gcc.dg/vect/vect-71.c: Add novector pragma. * gcc.dg/vect/vect-72.c: Add novector pragma. * gcc.dg/vect/vect-73-big-array.c: Add novector pragma. * gcc.dg/vect/vect-73.c: Add novector pragma. * gcc.dg/vect/vect-74-big-array.c: Add novector pragma. * gcc.dg/vect/vect-74.c: Add novector pragma. * gcc.dg/vect/vect-75-big-array.c: Add novector pragma. * gcc.dg/vect/vect-75.c: Add novector pragma. * gcc.dg/vect/vect-76-big-array.c: Add novector pragma. * gcc.dg/vect/vect-76.c: Add novector pragma. * gcc.dg/vect/vect-77-alignchecks.c: Add novector pragma. * gcc.dg/vect/vect-77-global.c: Add novector pragma. * gcc.dg/vect/vect-77.c: Add novector pragma. * gcc.dg/vect/vect-78-alignchecks.c: Add novector pragma. * gcc.dg/vect/vect-78-global.c: Add novector pragma. * gcc.dg/vect/vect-78.c: Add novector pragma. * gcc.dg/vect/vect-8.c: Add novector pragma. * gcc.dg/vect/vect-80-big-array.c: Add novector pragma. * gcc.dg/vect/vect-80.c: Add novector pragma. * gcc.dg/vect/vect-82.c: Add novector pragma. * gcc.dg/vect/vect-82_64.c: Add novector pragma. * gcc.dg/vect/vect-83.c: Add novector pragma. * gcc.dg/vect/vect-83_64.c: Add novector pragma. * gcc.dg/vect/vect-85-big-array.c: Add novector pragma. * gcc.dg/vect/vect-85.c: Add novector pragma. * gcc.dg/vect/vect-86.c: Add novector pragma. * gcc.dg/vect/vect-87.c: Add novector pragma. * gcc.dg/vect/vect-88.c: Add novector pragma. * gcc.dg/vect/vect-89-big-array.c: Add novector pragma. * gcc.dg/vect/vect-89.c: Add novector pragma. * gcc.dg/vect/vect-9.c: Add novector pragma. * gcc.dg/vect/vect-92.c: Add novector pragma. * gcc.dg/vect/vect-93.c: Add novector pragma. * gcc.dg/vect/vect-95.c: Add novector pragma. * gcc.dg/vect/vect-96.c: Add novector pragma. * gcc.dg/vect/vect-97-big-array.c: Add novector pragma. * gcc.dg/vect/vect-97.c: Add novector pragma. * gcc.dg/vect/vect-98-big-array.c: Add novector pragma. * gcc.dg/vect/vect-98.c: Add novector pragma. * gcc.dg/vect/vect-99.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-10.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-11.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-12.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-14.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-15.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-16.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-18.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-19.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-20.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-8.c: Add novector pragma. * gcc.dg/vect/vect-alias-check-9.c: Add novector pragma. * gcc.dg/vect/vect-align-1.c: Add novector pragma. * gcc.dg/vect/vect-align-2.c: Add novector pragma. * gcc.dg/vect/vect-all-big-array.c: Add novector pragma. * gcc.dg/vect/vect-all.c: Add novector pragma. * gcc.dg/vect/vect-avg-1.c: Add novector pragma. * gcc.dg/vect/vect-avg-11.c: Add novector pragma. * gcc.dg/vect/vect-avg-15.c: Add novector pragma. * gcc.dg/vect/vect-avg-16.c: Add novector pragma. * gcc.dg/vect/vect-avg-5.c: Add novector pragma. * gcc.dg/vect/vect-bitfield-write-1.c: Add novector pragma. * gcc.dg/vect/vect-bitfield-write-2.c: Add novector pragma. * gcc.dg/vect/vect-bitfield-write-3.c: Add novector pragma. * gcc.dg/vect/vect-bitfield-write-4.c: Add novector pragma. * gcc.dg/vect/vect-bitfield-write-5.c: Add novector pragma. * gcc.dg/vect/vect-bool-cmp.c: Add novector pragma. * gcc.dg/vect/vect-bswap16.c: Add novector pragma. * gcc.dg/vect/vect-bswap32.c: Add novector pragma. * gcc.dg/vect/vect-bswap64.c: Add novector pragma. * gcc.dg/vect/vect-complex-1.c: Add novector pragma. * gcc.dg/vect/vect-complex-2.c: Add novector pragma. * gcc.dg/vect/vect-complex-4.c: Add novector pragma. * gcc.dg/vect/vect-cond-1.c: Add novector pragma. * gcc.dg/vect/vect-cond-10.c: Add novector pragma. * gcc.dg/vect/vect-cond-11.c: Add novector pragma. * gcc.dg/vect/vect-cond-3.c: Add novector pragma. * gcc.dg/vect/vect-cond-4.c: Add novector pragma. * gcc.dg/vect/vect-cond-5.c: Add novector pragma. * gcc.dg/vect/vect-cond-6.c: Add novector pragma. * gcc.dg/vect/vect-cond-7.c: Add novector pragma. * gcc.dg/vect/vect-cond-8.c: Add novector pragma. * gcc.dg/vect/vect-cond-9.c: Add novector pragma. * gcc.dg/vect/vect-cond-arith-1.c: Add novector pragma. * gcc.dg/vect/vect-cond-arith-3.c: Add novector pragma. * gcc.dg/vect/vect-cond-arith-4.c: Add novector pragma. * gcc.dg/vect/vect-cond-arith-5.c: Add novector pragma. * gcc.dg/vect/vect-cond-arith-6.c: Add novector pragma. * gcc.dg/vect/vect-cond-arith-7.c: Add novector pragma. * gcc.dg/vect/vect-cselim-1.c: Add novector pragma. * gcc.dg/vect/vect-cselim-2.c: Add novector pragma. * gcc.dg/vect/vect-div-bitmask-4.c: Add novector pragma. * gcc.dg/vect/vect-div-bitmask-5.c: Add novector pragma. * gcc.dg/vect/vect-div-bitmask.h: Add novector pragma. * gcc.dg/vect/vect-double-reduc-1.c: Add novector pragma. * gcc.dg/vect/vect-double-reduc-2.c: Add novector pragma. * gcc.dg/vect/vect-double-reduc-3.c: Add novector pragma. * gcc.dg/vect/vect-double-reduc-4.c: Add novector pragma. * gcc.dg/vect/vect-double-reduc-5.c: Add novector pragma. * gcc.dg/vect/vect-double-reduc-6-big-array.c: Add novector pragma. * gcc.dg/vect/vect-double-reduc-6.c: Add novector pragma. * gcc.dg/vect/vect-double-reduc-7.c: Add novector pragma. * gcc.dg/vect/vect-float-extend-1.c: Add novector pragma. * gcc.dg/vect/vect-float-truncate-1.c: Add novector pragma. * gcc.dg/vect/vect-floatint-conversion-1.c: Add novector pragma. * gcc.dg/vect/vect-floatint-conversion-2.c: Add novector pragma. * gcc.dg/vect/vect-fma-1.c: Add novector pragma. * gcc.dg/vect/vect-gather-1.c: Add novector pragma. * gcc.dg/vect/vect-gather-3.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-11.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-16.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-17.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-2.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-3.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-4.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-5.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-6.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-7.c: Add novector pragma. * gcc.dg/vect/vect-ifcvt-9.c: Add novector pragma. * gcc.dg/vect/vect-intfloat-conversion-1.c: Add novector pragma. * gcc.dg/vect/vect-intfloat-conversion-2.c: Add novector pragma. * gcc.dg/vect/vect-intfloat-conversion-3.c: Add novector pragma. * gcc.dg/vect/vect-intfloat-conversion-4a.c: Add novector pragma. * gcc.dg/vect/vect-intfloat-conversion-4b.c: Add novector pragma. * gcc.dg/vect/vect-iv-1.c: Add novector pragma. * gcc.dg/vect/vect-iv-10.c: Add novector pragma. * gcc.dg/vect/vect-iv-2.c: Add novector pragma. * gcc.dg/vect/vect-iv-3.c: Add novector pragma. * gcc.dg/vect/vect-iv-4.c: Add novector pragma. * gcc.dg/vect/vect-iv-5.c: Add novector pragma. * gcc.dg/vect/vect-iv-6.c: Add novector pragma. * gcc.dg/vect/vect-iv-7.c: Add novector pragma. * gcc.dg/vect/vect-iv-8-big-array.c: Add novector pragma. * gcc.dg/vect/vect-iv-8.c: Add novector pragma. * gcc.dg/vect/vect-iv-8a-big-array.c: Add novector pragma. * gcc.dg/vect/vect-iv-8a.c: Add novector pragma. * gcc.dg/vect/vect-live-1.c: Add novector pragma. * gcc.dg/vect/vect-live-2.c: Add novector pragma. * gcc.dg/vect/vect-live-3.c: Add novector pragma. * gcc.dg/vect/vect-live-4.c: Add novector pragma. * gcc.dg/vect/vect-live-5.c: Add novector pragma. * gcc.dg/vect/vect-live-slp-1.c: Add novector pragma. * gcc.dg/vect/vect-live-slp-2.c: Add novector pragma. * gcc.dg/vect/vect-live-slp-3.c: Add novector pragma. * gcc.dg/vect/vect-mask-load-1.c: Add novector pragma. * gcc.dg/vect/vect-mask-loadstore-1.c: Add novector pragma. * gcc.dg/vect/vect-mulhrs-1.c: Add novector pragma. * gcc.dg/vect/vect-mult-const-pattern-1.c: Add novector pragma. * gcc.dg/vect/vect-mult-const-pattern-2.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-1.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-10.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-11.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-12.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-13.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-14.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-16.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-17.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-2.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-3.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-4.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-5.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-6.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-8.c: Add novector pragma. * gcc.dg/vect/vect-multitypes-9.c: Add novector pragma. * gcc.dg/vect/vect-nb-iter-ub-1.c: Add novector pragma. * gcc.dg/vect/vect-nb-iter-ub-2.c: Add novector pragma. * gcc.dg/vect/vect-nb-iter-ub-3.c: Add novector pragma. * gcc.dg/vect/vect-neg-store-1.c: Add novector pragma. * gcc.dg/vect/vect-neg-store-2.c: Add novector pragma. * gcc.dg/vect/vect-nest-cycle-1.c: Add novector pragma. * gcc.dg/vect/vect-nest-cycle-2.c: Add novector pragma. * gcc.dg/vect/vect-nest-cycle-3.c: Add novector pragma. * gcc.dg/vect/vect-outer-2-big-array.c: Add novector pragma. * gcc.dg/vect/vect-outer-2.c: Add novector pragma. * gcc.dg/vect/vect-outer-2a-big-array.c: Add novector pragma. * gcc.dg/vect/vect-outer-2a.c: Add novector pragma. * gcc.dg/vect/vect-outer-2b.c: Add novector pragma. * gcc.dg/vect/vect-outer-2c-big-array.c: Add novector pragma. * gcc.dg/vect/vect-outer-2c.c: Add novector pragma. * gcc.dg/vect/vect-outer-2d.c: Add novector pragma. * gcc.dg/vect/vect-outer-3-big-array.c: Add novector pragma. * gcc.dg/vect/vect-outer-3.c: Add novector pragma. * gcc.dg/vect/vect-outer-3a-big-array.c: Add novector pragma. * gcc.dg/vect/vect-outer-3a.c: Add novector pragma. * gcc.dg/vect/vect-outer-3b.c: Add novector pragma. * gcc.dg/vect/vect-outer-3c.c: Add novector pragma. * gcc.dg/vect/vect-outer-4.c: Add novector pragma. * gcc.dg/vect/vect-outer-4d-big-array.c: Add novector pragma. * gcc.dg/vect/vect-outer-4d.c: Add novector pragma. * gcc.dg/vect/vect-outer-5.c: Add novector pragma. * gcc.dg/vect/vect-outer-6.c: Add novector pragma. * gcc.dg/vect/vect-outer-fir-big-array.c: Add novector pragma. * gcc.dg/vect/vect-outer-fir-lb-big-array.c: Add novector pragma. * gcc.dg/vect/vect-outer-fir-lb.c: Add novector pragma. * gcc.dg/vect/vect-outer-fir.c: Add novector pragma. * gcc.dg/vect/vect-outer-simd-1.c: Add novector pragma. * gcc.dg/vect/vect-outer-simd-2.c: Add novector pragma. * gcc.dg/vect/vect-outer-simd-3.c: Add novector pragma. * gcc.dg/vect/vect-outer-slp-2.c: Add novector pragma. * gcc.dg/vect/vect-outer-slp-3.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-1-big-array.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-1.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-11.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-13.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-15.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-17.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-18.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-19.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-2-big-array.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-2.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-20.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-21.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-22.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-3-big-array.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-3.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-4-big-array.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-4.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-5.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-7.c: Add novector pragma. * gcc.dg/vect/vect-over-widen-9.c: Add novector pragma. * gcc.dg/vect/vect-peel-1-src.c: Add novector pragma. * gcc.dg/vect/vect-peel-2-src.c: Add novector pragma. * gcc.dg/vect/vect-peel-4-src.c: Add novector pragma. * gcc.dg/vect/vect-recurr-1.c: Add novector pragma. * gcc.dg/vect/vect-recurr-2.c: Add novector pragma. * gcc.dg/vect/vect-recurr-3.c: Add novector pragma. * gcc.dg/vect/vect-recurr-4.c: Add novector pragma. * gcc.dg/vect/vect-recurr-5.c: Add novector pragma. * gcc.dg/vect/vect-recurr-6.c: Add novector pragma. * gcc.dg/vect/vect-sdiv-pow2-1.c: Add novector pragma. * gcc.dg/vect/vect-sdivmod-1.c: Add novector pragma. * gcc.dg/vect/vect-shift-1.c: Add novector pragma. * gcc.dg/vect/vect-shift-3.c: Add novector pragma. * gcc.dg/vect/vect-shift-4.c: Add novector pragma. * gcc.dg/vect/vect-simd-1.c: Add novector pragma. * gcc.dg/vect/vect-simd-10.c: Add novector pragma. * gcc.dg/vect/vect-simd-11.c: Add novector pragma. * gcc.dg/vect/vect-simd-12.c: Add novector pragma. * gcc.dg/vect/vect-simd-13.c: Add novector pragma. * gcc.dg/vect/vect-simd-14.c: Add novector pragma. * gcc.dg/vect/vect-simd-15.c: Add novector pragma. * gcc.dg/vect/vect-simd-16.c: Add novector pragma. * gcc.dg/vect/vect-simd-17.c: Add novector pragma. * gcc.dg/vect/vect-simd-18.c: Add novector pragma. * gcc.dg/vect/vect-simd-19.c: Add novector pragma. * gcc.dg/vect/vect-simd-20.c: Add novector pragma. * gcc.dg/vect/vect-simd-8.c: Add novector pragma. * gcc.dg/vect/vect-simd-9.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-1.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-10.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-11.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-15.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-2.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-3.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-4.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-5.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-6.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-7.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-8.c: Add novector pragma. * gcc.dg/vect/vect-simd-clone-9.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-mult.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-u16-i2.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-u16-i4.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-u16-mult.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-u32-mult.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-u8-i2-gap.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-u8-i8-gap2-big-array.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-u8-i8-gap2.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-u8-i8-gap7-big-array.c: Add novector pragma. * gcc.dg/vect/vect-strided-a-u8-i8-gap7.c: Add novector pragma. * gcc.dg/vect/vect-strided-float.c: Add novector pragma. * gcc.dg/vect/vect-strided-mult-char-ls.c: Add novector pragma. * gcc.dg/vect/vect-strided-mult.c: Add novector pragma. * gcc.dg/vect/vect-strided-same-dr.c: Add novector pragma. * gcc.dg/vect/vect-strided-shift-1.c: Add novector pragma. * gcc.dg/vect/vect-strided-store-a-u8-i2.c: Add novector pragma. * gcc.dg/vect/vect-strided-store-u16-i4.c: Add novector pragma. * gcc.dg/vect/vect-strided-store-u32-i2.c: Add novector pragma. * gcc.dg/vect/vect-strided-store.c: Add novector pragma. * gcc.dg/vect/vect-strided-u16-i2.c: Add novector pragma. * gcc.dg/vect/vect-strided-u16-i3.c: Add novector pragma. * gcc.dg/vect/vect-strided-u16-i4.c: Add novector pragma. * gcc.dg/vect/vect-strided-u32-i4.c: Add novector pragma. * gcc.dg/vect/vect-strided-u32-i8.c: Add novector pragma. * gcc.dg/vect/vect-strided-u32-mult.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i2-gap.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i2.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i8-gap2-big-array.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i8-gap2.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i8-gap4-big-array.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i8-gap4-unknown.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i8-gap4.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i8-gap7-big-array.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i8-gap7.c: Add novector pragma. * gcc.dg/vect/vect-strided-u8-i8.c: Add novector pragma. * gcc.dg/vect/vect-vfa-01.c: Add novector pragma. * gcc.dg/vect/vect-vfa-02.c: Add novector pragma. * gcc.dg/vect/vect-vfa-03.c: Add novector pragma. * gcc.dg/vect/vect-vfa-04.c: Add novector pragma. * gcc.dg/vect/vect-vfa-slp.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-1.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-const-s16.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-const-u16.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-half-u8.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-half.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-s16.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-s8.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-u16.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-u8-s16-s32.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-u8-u32.c: Add novector pragma. * gcc.dg/vect/vect-widen-mult-u8.c: Add novector pragma. * gcc.dg/vect/vect-widen-shift-s16.c: Add novector pragma. * gcc.dg/vect/vect-widen-shift-s8.c: Add novector pragma. * gcc.dg/vect/vect-widen-shift-u16.c: Add novector pragma. * gcc.dg/vect/vect-widen-shift-u8.c: Add novector pragma. * gcc.dg/vect/wrapv-vect-7.c: Add novector pragma.
-
Tamar Christina authored
FORTRAN currently has a pragma NOVECTOR for indicating that vectorization should not be applied to a particular loop. ICC/ICX also has such a pragma for C and C++ called #pragma novector. As part of this patch series I need a way to easily turn off vectorization of particular loops, particularly for testsuite reasons. This patch proposes a #pragma GCC novector that does the same for C as gfortan does for FORTRAN and what ICX/ICX does for C. I added only some basic tests here, but the next patch in the series uses this in the testsuite in about ~800 tests. gcc/c-family/ChangeLog: * c-pragma.h (enum pragma_kind): Add PRAGMA_NOVECTOR. * c-pragma.cc (init_pragma): Use it. gcc/c/ChangeLog: * c-parser.cc (c_parser_while_statement, c_parser_do_statement, c_parser_for_statement, c_parser_statement_after_labels, c_parse_pragma_novector, c_parser_pragma): Wire through novector and default to false. gcc/testsuite/ChangeLog: * gcc.dg/vect/vect-novector-pragma.c: New test.
-
Tamar Christina authored
FORTRAN currently has a pragma NOVECTOR for indicating that vectorization should not be applied to a particular loop. ICC/ICX also has such a pragma for C and C++ called #pragma novector. As part of this patch series I need a way to easily turn off vectorization of particular loops, particularly for testsuite reasons. This patch proposes a #pragma GCC novector that does the same for C++ as gfortan does for FORTRAN and what ICX/ICX does for C++. I added only some basic tests here, but the next patch in the series uses this in the testsuite in about ~800 tests. gcc/cp/ChangeLog: * cp-tree.h (RANGE_FOR_NOVECTOR): New. (cp_convert_range_for, finish_while_stmt_cond, finish_do_stmt, finish_for_cond): Add novector param. * init.cc (build_vec_init): Default novector to false. * method.cc (build_comparison_op): Likewise. * parser.cc (cp_parser_statement): Likewise. (cp_parser_for, cp_parser_c_for, cp_parser_range_for, cp_convert_range_for, cp_parser_iteration_statement, cp_parser_omp_for_loop, cp_parser_pragma): Support novector. (cp_parser_pragma_novector): New. * pt.cc (tsubst_expr): Likewise. * semantics.cc (finish_while_stmt_cond, finish_do_stmt, finish_for_cond): Likewise. gcc/ChangeLog: * doc/extend.texi: Document it. gcc/testsuite/ChangeLog: * g++.dg/vect/vect.exp (support vect- prefix). * g++.dg/vect/vect-novector-pragma.cc: New test.
-