2016-07-11 Marek Polacek <pola...@redhat.com> PR c/7652 * config/i386/driver-i386.c (decode_caches_intel): Likewise. (detect_caches_cpuid4): Likewise. * config/i386/i386-c.c (ix86_target_macros_internal): Likewise. * config/i386/i386.c (function_arg_advance_32): Likewise. (function_arg_32): Likewise. (ix86_gimplify_va_arg): Likewise. (standard_sse_constant_opcode): Likewise. (ix86_decompose_address): Likewise. (ix86_legitimate_constant_p): Likewise. (legitimate_pic_operand_p): Likewise. (legitimate_pic_address_disp_p): Likewise. (ix86_legitimate_address_p): Likewise. (output_pic_addr_const): Likewise. (print_reg): Likewise. (ix86_print_operand): Likewise. (ix86_expand_move): Likewise. (ix86_build_const_vector): Likewise. (ix86_match_ccmode): Likewise. (ix86_expand_branch): Likewise. (ix86_prepare_sse_fp_compare_args): Likewise. (ix86_expand_int_sse_cmp): Likewise. (ix86_adjust_cost): Likewise. (ix86_sched_init_global): Likewise. (ix86_expand_multi_arg_builtin): Likewise. (ix86_expand_args_builtin): Likewise. (ix86_expand_round_builtin): Likewise. (ix86_expand_special_args_builtin): Likewise. (ix86_expand_builtin): Likewise. (avx_vpermilp_parallel): Likewise. (ix86_rtx_costs): Likewise. (ix86_expand_vector_init_duplicate): Likewise. (ix86_expand_vector_init_one_nonzero): Likewise. (ix86_expand_vector_init_one_var): Likewise. (ix86_expand_vector_init_interleave): Likewise. (ix86_expand_vector_init_general): Likewise. (ix86_expand_vector_extract): Likewise. (expand_vec_perm_blend): Likewise. (canonicalize_perm): Likewise. (ix86_expand_vecop_qihi): Likewise. (ix86_preferred_simd_mode): Likewise. * config/i386/sse.md: Likewise.
diff --git gcc/gcc/config/i386/driver-i386.c gcc/gcc/config/i386/driver-i386.c index 22a8f28..a84a326 100644 --- gcc/gcc/config/i386/driver-i386.c +++ gcc/gcc/config/i386/driver-i386.c @@ -238,6 +238,7 @@ decode_caches_intel (unsigned reg, bool xeon_mp, break; case 0x87: level2->sizekb = 1024; level2->assoc = 8; level2->line = 64; + gcc_fallthrough (); default: break; @@ -326,6 +327,7 @@ detect_caches_cpuid4 (struct cache_desc *level1, struct cache_desc *level2, * cache->line * sets) / 1024; } } + gcc_fallthrough (); default: break; } diff --git gcc/gcc/config/i386/i386-c.c gcc/gcc/config/i386/i386-c.c index f93a09d..8e5087d 100644 --- gcc/gcc/config/i386/i386-c.c +++ gcc/gcc/config/i386/i386-c.c @@ -210,6 +210,7 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, case '3': def_or_undef (parse_in, "__tune_pentium3__"); /* FALLTHRU */ + gcc_fallthrough (); case '2': def_or_undef (parse_in, "__tune_pentium2__"); break; diff --git gcc/gcc/config/i386/i386.c gcc/gcc/config/i386/i386.c index 9eaf414..f7e9845 100644 --- gcc/gcc/config/i386/i386.c +++ gcc/gcc/config/i386/i386.c @@ -9284,6 +9284,7 @@ function_arg_advance_32 (CUMULATIVE_ARGS *cum, machine_mode mode, if (bytes < 0) break; /* FALLTHRU */ + gcc_fallthrough (); case DImode: case SImode: @@ -9312,12 +9313,14 @@ pass_in_reg: error_p = 1; if (cum->float_in_sse < 2) break; + gcc_fallthrough (); case SFmode: if (cum->float_in_sse == -1) error_p = 1; if (cum->float_in_sse < 1) break; /* FALLTHRU */ + gcc_fallthrough (); case V8SFmode: case V8SImode: @@ -9547,6 +9550,7 @@ function_arg_32 (CUMULATIVE_ARGS *cum, machine_mode mode, if (bytes < 0) break; /* FALLTHRU */ + gcc_fallthrough (); case DImode: case SImode: case HImode: @@ -9579,12 +9583,14 @@ pass_in_reg: error_p = 1; if (cum->float_in_sse < 2) break; + gcc_fallthrough (); case SFmode: if (cum->float_in_sse == -1) error_p = 1; if (cum->float_in_sse < 1) break; /* FALLTHRU */ + gcc_fallthrough (); case TImode: /* In 32bit, we pass TImode in xmm registers. */ case V16QImode: @@ -10984,6 +10990,7 @@ ix86_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p, container = NULL; break; } + gcc_fallthrough (); default: container = construct_container (nat_mode, TYPE_MODE (type), @@ -11495,6 +11502,7 @@ standard_sse_constant_opcode (rtx_insn *insn, rtx x) case MODE_V8SF: gcc_assert (TARGET_AVX2); /* FALLTHRU */ + gcc_fallthrough (); case MODE_TI: case MODE_V2DF: case MODE_V4SF: @@ -14911,6 +14919,7 @@ ix86_decompose_address (rtx addr, struct ix86_address *out) if (GET_CODE (op) != UNSPEC) return 0; /* FALLTHRU */ + gcc_fallthrough (); case UNSPEC: if (XINT (op, 1) == UNSPEC_TP @@ -14925,6 +14934,7 @@ ix86_decompose_address (rtx addr, struct ix86_address *out) if (!REG_P (SUBREG_REG (op))) return 0; /* FALLTHRU */ + gcc_fallthrough (); case REG: if (!base) @@ -15186,6 +15196,7 @@ ix86_legitimate_constant_p (machine_mode mode, rtx x) if (GET_CODE (x) != SYMBOL_REF) return false; /* FALLTHRU */ + gcc_fallthrough (); case SYMBOL_REF: /* TLS symbols are never valid. */ @@ -15217,10 +15228,12 @@ ix86_legitimate_constant_p (machine_mode mode, rtx x) if (TARGET_64BIT) return true; /* FALLTHRU */ + gcc_fallthrough (); case OImode: case XImode: if (!standard_sse_constant_p (x, mode)) return false; + gcc_fallthrough (); default: break; } @@ -15229,6 +15242,7 @@ ix86_legitimate_constant_p (machine_mode mode, rtx x) case CONST_VECTOR: if (!standard_sse_constant_p (x, mode)) return false; + gcc_fallthrough (); default: break; @@ -15307,6 +15321,7 @@ legitimate_pic_operand_p (rtx x) return false; } /* FALLTHRU */ + gcc_fallthrough (); case SYMBOL_REF: case LABEL_REF: @@ -15357,6 +15372,7 @@ legitimate_pic_address_disp_p (rtx disp) if (GET_CODE (op0) != SYMBOL_REF) break; /* FALLTHRU */ + gcc_fallthrough (); case SYMBOL_REF: /* TLS references should always be enclosed in UNSPEC. @@ -15613,6 +15629,7 @@ ix86_legitimate_address_p (machine_mode, rtx addr, bool strict) && ix86_force_load_from_GOT_p (XVECEXP (XEXP (disp, 0), 0, 0))) goto is_legitimate_pic; /* FALLTHRU */ + gcc_fallthrough (); case UNSPEC_GOTOFF: gcc_assert (flag_pic); if (!TARGET_64BIT) @@ -15625,6 +15642,7 @@ ix86_legitimate_address_p (machine_mode, rtx addr, bool strict) if (ix86_force_load_from_GOT_p (XVECEXP (XEXP (disp, 0), 0, 0))) goto is_legitimate_pic; /* FALLTHRU */ + gcc_fallthrough (); case UNSPEC_PCREL: gcc_assert (flag_pic); goto is_legitimate_pic; @@ -16679,6 +16697,7 @@ output_pic_addr_const (FILE *file, rtx x, int code) case LABEL_REF: x = XEXP (x, 0); /* FALLTHRU */ + gcc_fallthrough (); case CODE_LABEL: ASM_GENERATE_INTERNAL_LABEL (buf, "L", CODE_LABEL_NUMBER (x)); assemble_name (asm_out_file, buf); @@ -17292,6 +17311,7 @@ print_reg (rtx x, int code, FILE *file) case 4: if (LEGACY_INT_REGNO_P (regno)) putc (msize == 8 && TARGET_64BIT ? 'r' : 'e', file); + gcc_fallthrough (); case 16: case 12: case 2: @@ -17541,6 +17561,7 @@ ix86_print_operand (FILE *file, rtx x, int code) warning (0, "non-integer operand used with operand code 'z'"); /* FALLTHRU */ + gcc_fallthrough (); case 'Z': /* 387 opcodes don't get size suffixes if using Intel opcodes. */ @@ -17701,6 +17722,7 @@ ix86_print_operand (FILE *file, rtx x, int code) fputs ("eq_us", file); break; } + gcc_fallthrough (); case EQ: fputs ("eq", file); break; @@ -17710,6 +17732,7 @@ ix86_print_operand (FILE *file, rtx x, int code) fputs ("nge", file); break; } + gcc_fallthrough (); case LT: fputs ("lt", file); break; @@ -17719,6 +17742,7 @@ ix86_print_operand (FILE *file, rtx x, int code) fputs ("ngt", file); break; } + gcc_fallthrough (); case LE: fputs ("le", file); break; @@ -17731,6 +17755,7 @@ ix86_print_operand (FILE *file, rtx x, int code) fputs ("neq_oq", file); break; } + gcc_fallthrough (); case NE: fputs ("neq", file); break; @@ -17740,6 +17765,7 @@ ix86_print_operand (FILE *file, rtx x, int code) fputs ("ge", file); break; } + gcc_fallthrough (); case UNGE: fputs ("nlt", file); break; @@ -17749,6 +17775,7 @@ ix86_print_operand (FILE *file, rtx x, int code) fputs ("gt", file); break; } + gcc_fallthrough (); case UNGT: fputs ("nle", file); break; @@ -19447,6 +19474,7 @@ ix86_expand_move (machine_mode mode, rtx operands[]) op1 = XEXP (tmp, 0); addend = XEXP (tmp, 1); /* FALLTHRU */ + gcc_fallthrough (); case SYMBOL_REF: model = SYMBOL_REF_TLS_MODEL (op1); @@ -19493,6 +19521,7 @@ ix86_expand_move (machine_mode mode, rtx operands[]) return; op1 = convert_to_mode (mode, op1, 1); + gcc_fallthrough (); default: break; @@ -21496,6 +21525,7 @@ ix86_build_const_vector (machine_mode mode, bool vect, rtx value) case V4DImode: case V2DImode: gcc_assert (vect); + gcc_fallthrough (); case V16SFmode: case V8SFmode: case V4SFmode: @@ -21836,14 +21866,17 @@ ix86_match_ccmode (rtx insn, machine_mode req_mode) if (req_mode == CCGCmode) return false; /* FALLTHRU */ + gcc_fallthrough (); case CCGCmode: if (req_mode == CCGOCmode || req_mode == CCNOmode) return false; /* FALLTHRU */ + gcc_fallthrough (); case CCGOCmode: if (req_mode == CCZmode) return false; /* FALLTHRU */ + gcc_fallthrough (); case CCZmode: break; @@ -22481,6 +22514,8 @@ ix86_expand_branch (enum rtx_code code, rtx op0, rtx op1, rtx label) op0 = force_reg (mode, gen_rtx_XOR (mode, op0, op1)); op1 = const0_rtx; } + /* XXX Really fallthru? */ + gcc_fallthrough (); case TImode: /* Expand DImode branch into multiple compare+branch. */ { @@ -23313,6 +23348,7 @@ ix86_prepare_sse_fp_compare_args (rtx dest, enum rtx_code code, if (!dest || !rtx_equal_p (dest, *pop1)) break; /* FALLTHRU */ + gcc_fallthrough (); case GE: case GT: @@ -23892,6 +23928,7 @@ ix86_expand_int_sse_cmp (rtx dest, enum rtx_code code, rtx cop0, rtx cop1, code = reverse_condition (code); *negate = true; /* FALLTHRU */ + gcc_fallthrough (); case LT: case LTU: @@ -28915,6 +28952,7 @@ ix86_adjust_cost (rtx_insn *insn, rtx link, rtx_insn *dep_insn, int cost) && (dep_insn_type == TYPE_PUSH || dep_insn_type == TYPE_POP)) return 0; /* FALLTHRU */ + gcc_fallthrough (); case PROCESSOR_ATHLON: case PROCESSOR_K8: @@ -29003,6 +29041,7 @@ ix86_adjust_cost (rtx_insn *insn, rtx link, rtx_insn *dep_insn, int cost) } } } + gcc_fallthrough (); default: break; @@ -29842,6 +29881,7 @@ ix86_sched_init_global (FILE *, int, int) break; } /* ... Fall through ... */ + gcc_fallthrough (); default: targetm.sched.dfa_post_advance_cycle = NULL; targetm.sched.first_cycle_multipass_init = NULL; @@ -38725,6 +38765,7 @@ ix86_expand_multi_arg_builtin (enum insn_code icode, tree exp, rtx target, goto xop_rotl; case CODE_FOR_xop_rotlv16qi3: new_icode = CODE_FOR_rotlv16qi3; + gcc_fallthrough (); xop_rotl: if (CONST_INT_P (op)) { @@ -40112,6 +40153,7 @@ ix86_expand_args_builtin (const struct builtin_description *d, error ("the next to last argument must be an 8-bit immediate"); break; } + gcc_fallthrough (); case 1: error ("the last argument must be an 8-bit immediate"); break; @@ -40168,6 +40210,8 @@ ix86_expand_args_builtin (const struct builtin_description *d, case 5: pat = GEN_FCN (icode) (real_target, args[0].op, args[1].op, args[2].op, args[3].op, args[4].op); + /* XXX Really fallthru? */ + gcc_fallthrough (); case 6: pat = GEN_FCN (icode) (real_target, args[0].op, args[1].op, args[2].op, args[3].op, args[4].op, @@ -40542,6 +40586,8 @@ ix86_expand_round_builtin (const struct builtin_description *d, case 5: pat = GEN_FCN (icode) (target, args[0].op, args[1].op, args[2].op, args[3].op, args[4].op); + /* XXX Really fallthru? */ + gcc_fallthrough (); case 6: pat = GEN_FCN (icode) (target, args[0].op, args[1].op, args[2].op, args[3].op, args[4].op, @@ -40725,6 +40771,7 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, break; } /* FALLTHRU */ + gcc_fallthrough (); case VOID_FTYPE_PV8SF_V8SI_V8SF: case VOID_FTYPE_PV4DF_V4DI_V4DF: case VOID_FTYPE_PV4SF_V4SI_V4SF: @@ -41973,6 +42020,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_RDRAND64_STEP: icode = CODE_FOR_rdranddi_1; mode0 = DImode; + gcc_fallthrough (); rdrand_step: op0 = gen_reg_rtx (mode0); @@ -42024,6 +42072,7 @@ rdrand_step: case IX86_BUILTIN_RDSEED64_STEP: icode = CODE_FOR_rdseeddi_1; mode0 = DImode; + gcc_fallthrough (); rdseed_step: op0 = gen_reg_rtx (mode0); @@ -42069,6 +42118,7 @@ rdseed_step: case IX86_BUILTIN_ADDCARRYX64: icode = CODE_FOR_addcarrydi; mode0 = DImode; + gcc_fallthrough (); handlecarry: arg0 = CALL_EXPR_ARG (exp, 0); /* unsigned char c_in. */ @@ -42149,6 +42199,7 @@ rdseed_step: icode = CODE_FOR_kortestzhi; mode0 = HImode; mode1 = CCZmode; + gcc_fallthrough (); kortest: arg0 = CALL_EXPR_ARG (exp, 0); /* Mask reg src1. */ @@ -42612,6 +42663,7 @@ rdseed_step: if (!integer_zerop (gimple_call_arg (def_stmt, 2))) break; /* FALLTHRU */ + gcc_fallthrough (); case IX86_BUILTIN_CMPEQPD: case IX86_BUILTIN_CMPEQPS: if (initializer_zerop (gimple_call_arg (def_stmt, 0)) @@ -42841,6 +42893,7 @@ rdseed_step: if (!TARGET_SSE) /* Emit a normal call if SSE isn't available. */ return expand_call (exp, target, ignore); + gcc_fallthrough (); default: return ix86_expand_args_builtin (d, exp, target); } @@ -43772,6 +43825,7 @@ avx_vpermilp_parallel (rtx par, machine_mode mode) mask |= (ipar[i] - 6) << i; } /* FALLTHRU */ + gcc_fallthrough (); case V4DFmode: /* In the 256-bit DFmode case, we can only move elements within @@ -43797,6 +43851,7 @@ avx_vpermilp_parallel (rtx par, machine_mode mode) if (ipar[i] + 8 != ipar[i + 8]) return 0; /* FALLTHRU */ + gcc_fallthrough (); case V8SFmode: /* In 256 bit SFmode case, we have full freedom of @@ -43807,6 +43862,7 @@ avx_vpermilp_parallel (rtx par, machine_mode mode) return 0; nelt = 4; /* FALLTHRU */ + gcc_fallthrough (); case V2DFmode: case V4SFmode: @@ -44714,6 +44770,7 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, return true; } /* FALLTHRU */ + gcc_fallthrough (); case CONST_VECTOR: switch (standard_sse_constant_p (x, mode)) @@ -44728,6 +44785,7 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, return true; } /* FALLTHRU */ + gcc_fallthrough (); case CONST_WIDE_INT: /* Fall back to (MEM (SYMBOL_REF)), since that's where @@ -44773,6 +44831,7 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, } } /* FALLTHRU */ + gcc_fallthrough (); case ROTATE: case ASHIFTRT: @@ -45024,6 +45083,7 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, } } /* FALLTHRU */ + gcc_fallthrough (); case MINUS: if (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH) @@ -45044,6 +45104,7 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, return false; } /* FALLTHRU */ + gcc_fallthrough (); case AND: case IOR: @@ -45059,6 +45120,7 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, return true; } /* FALLTHRU */ + gcc_fallthrough (); case NEG: if (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH) @@ -45079,6 +45141,7 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, return false; } /* FALLTHRU */ + gcc_fallthrough (); case NOT: if (GET_MODE_CLASS (mode) == MODE_VECTOR_INT) @@ -46669,6 +46732,7 @@ ix86_expand_vector_init_duplicate (bool mmx_ok, machine_mode mode, if (!mmx_ok) return false; /* FALLTHRU */ + gcc_fallthrough (); case V4DFmode: case V4DImode: @@ -46871,6 +46935,7 @@ ix86_expand_vector_init_one_nonzero (bool mmx_ok, machine_mode mode, if (!mmx_ok) return false; /* FALLTHRU */ + gcc_fallthrough (); case V2DFmode: case V2DImode: @@ -46994,6 +47059,7 @@ ix86_expand_vector_init_one_var (bool mmx_ok, machine_mode mode, /* Use ix86_expand_vector_set in 64bit mode only. */ if (!TARGET_64BIT) return false; + gcc_fallthrough (); case V4DFmode: case V8SFmode: case V8SImode: @@ -47336,6 +47402,7 @@ ix86_expand_vector_init_interleave (machine_mode mode, second_imode = V2DImode; gen_interleave_second_low = gen_vec_interleave_lowv2di; /* FALLTHRU */ + gcc_fallthrough (); case V2DImode: op0 = gen_reg_rtx (second_imode); @@ -47371,6 +47438,7 @@ ix86_expand_vector_init_general (bool mmx_ok, machine_mode mode, if (!mmx_ok && !TARGET_SSE) break; /* FALLTHRU */ + gcc_fallthrough (); case V16SImode: case V16SFmode: @@ -47448,6 +47516,7 @@ quarter: if (!TARGET_SSE4_1) break; /* FALLTHRU */ + gcc_fallthrough (); case V8HImode: if (!TARGET_SSE2) @@ -47928,6 +47997,7 @@ ix86_expand_vector_extract (bool mmx_ok, rtx target, rtx vec, int elt) if (!mmx_ok) break; /* FALLTHRU */ + gcc_fallthrough (); case V2DFmode: case V2DImode: @@ -50006,6 +50076,7 @@ expand_vec_perm_blend (struct expand_vec_perm_d *d) mask |= (d->perm[i * 2] >= 16) << i; vmode = V8HImode; /* FALLTHRU */ + gcc_fallthrough (); do_subreg: target = gen_reg_rtx (vmode); @@ -52656,6 +52727,7 @@ canonicalize_perm (struct expand_vec_perm_d *d) of the permutation by folding the permutation into the single input vector. */ /* FALLTHRU */ + gcc_fallthrough (); case 2: for (i = 0; i < nelt; ++i) @@ -52945,6 +53017,7 @@ ix86_expand_vecop_qihi (enum rtx_code code, rtx dest, rtx op1, rtx op2) case LSHIFTRT: uns_p = true; /* FALLTHRU */ + gcc_fallthrough (); case ASHIFTRT: op1_l = gen_reg_rtx (himode); op1_h = gen_reg_rtx (himode); @@ -54627,6 +54700,7 @@ ix86_preferred_simd_mode (machine_mode mode) else if (TARGET_SSE2) return V2DFmode; /* FALLTHRU */ + gcc_fallthrough (); default: return word_mode; diff --git gcc/gcc/config/i386/sse.md gcc/gcc/config/i386/sse.md index c1ea04f..6b500bc 100644 --- gcc/gcc/config/i386/sse.md +++ gcc/gcc/config/i386/sse.md @@ -3185,6 +3185,7 @@ break; } /* FALLTHRU */ + gcc_fallthrough (); case 1: ops = "v<logic>%s\t{%%2, %%1, %%0|%%0, %%1, %%2}"; break; @@ -12221,6 +12222,7 @@ if (GET_MODE_SIZE (<ssescalarmode>mode) < GET_MODE_SIZE (SImode)) return "pinsr<ssemodesuffix>\t{%3, %k2, %0|%0, %k2, %3}"; /* FALLTHRU */ + gcc_fallthrough (); case 1: return "pinsr<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}"; case 2: @@ -12228,6 +12230,7 @@ if (GET_MODE_SIZE (<ssescalarmode>mode) < GET_MODE_SIZE (SImode)) return "vpinsr<ssemodesuffix>\t{%3, %k2, %1, %0|%0, %1, %k2, %3}"; /* FALLTHRU */ + gcc_fallthrough (); case 3: case 5: return "vpinsr<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"; @@ -13481,6 +13484,7 @@ } operands[1] = tmp; /* FALLTHRU */ + gcc_fallthrough (); case 32: tmp = gen_reg_rtx (<ssevecmode>mode); if (<MODE>mode == SImode)