From 615047e41304b136db37d0e87cbba5f5bec20af3 Mon Sep 17 00:00:00 2001 From: visit0r Date: Thu, 16 Nov 2017 17:20:45 +0000 Subject: [PATCH] [BRIGFE] Reduce the number of type conversions due to the untyped HSAIL regs. Instead of always representing the HSAIL's untyped registers as unsigned int, the gccbrig now pre-analyzes the BRIG code and builds the register variables as a type used the most when storing or reading data to/from each register. This reduces the total conversions which cannot be always optimized away. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254837 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/brig/ChangeLog | 37 + .../brigfrontend/brig-basic-inst-handler.cc | 13 +- .../brigfrontend/brig-code-entry-handler.cc | 126 +- .../brigfrontend/brig-code-entry-handler.h | 6 + .../brig-copy-move-inst-handler.cc | 4 +- .../brigfrontend/brig-cvt-inst-handler.cc | 50 +- gcc/brig/brigfrontend/brig-function.cc | 69 +- gcc/brig/brigfrontend/brig-function.h | 12 +- .../brigfrontend/brig-mem-inst-handler.cc | 15 +- gcc/brig/brigfrontend/brig-to-generic.cc | 101 +- gcc/brig/brigfrontend/brig-to-generic.h | 11 +- gcc/brig/brigfrontend/brig-util.cc | 89 + gcc/brig/brigfrontend/brig-util.h | 31 + gcc/testsuite/ChangeLog | 3008 +++++++++++++++++ .../brig.dg/test/gimple/internal-casts.hsail | 146 + .../brig.dg/test/gimple/packed.hsail | 18 +- .../brig.dg/test/gimple/vector.hsail | 10 +- 17 files changed, 3587 insertions(+), 159 deletions(-) create mode 100644 gcc/testsuite/brig.dg/test/gimple/internal-casts.hsail diff --git a/gcc/brig/ChangeLog b/gcc/brig/ChangeLog index fa7668486b2..17cc3bc1c42 100644 --- a/gcc/brig/ChangeLog +++ b/gcc/brig/ChangeLog @@ -1,3 +1,40 @@ +2017-11-16 Henry Linjamäki + + Change internal representation of HSA registers. Instead + representing HSA's untyped registers as unsigned int the gccbrig + analyzes brig code and builds the register variables as a type + used in tree expressions at most. This gives better chance to + optimize CONVERT_VIEW_EXPRs away. + * brigfrontend/brig-code-entry-handler.cc: Add analysis method for + register type usage. Handle any-typed register variables. + * brigfrontend/brig-code-entry-handler.h: New declarations for the + above. + * brigfrontend/brig-copy-move-inst-handler.cc: Handle any-typed + register variables. + * brigfrontend/brig-cvt-inst-handler.cc: Likewise. + * brigfrontend/brig-function.cc: Build register variables as a + type based on results of analysis phase. + * brigfrontend/brig-function.h: Move HSA register count defines to + brig-utils.h. + * brigfrontend/brig-to-generic.cc: New analysis handler. Analyze + HSA register usage. + * brigfrontend/brig-to-generic.h: New declarations. + * brigfrontend/brig-util.cc: New utility functions. + * brigfrontend/brig-util.h: New declarations for the above. + +2017-11-16 Pekka Jääskeläinen + + * gccbrig.texi: Added some documentation. + +2017-10-31 Henry Linjamäki + + * brig-lang.c (brig_langhook_type_for_mode): Fix PR 82771. + +2017-10-23 Richard Sandiford + + * brig-lang.c (brig_langhook_type_for_mode): Use scalar_int_mode + and scalar_float_mode. + 2017-10-09 Pekka Jääskeläinen * brigfrontend/brig-to-generic.cc: Support BRIG_KIND_NONE diff --git a/gcc/brig/brigfrontend/brig-basic-inst-handler.cc b/gcc/brig/brigfrontend/brig-basic-inst-handler.cc index 2c944849b59..ce715f79a38 100644 --- a/gcc/brig/brigfrontend/brig-basic-inst-handler.cc +++ b/gcc/brig/brigfrontend/brig-basic-inst-handler.cc @@ -184,15 +184,16 @@ brig_basic_inst_handler::build_unpack (tree_stl_vec &operands) tree and_mask_vec = build_constructor (vec_type, and_mask_vals); tree perm = build3 (VEC_PERM_EXPR, vec_type, - build_reinterpret_cast (vec_type, operands[0]), - build_reinterpret_cast (vec_type, operands[0]), mask_vec); + build_resize_convert_view (vec_type, operands[0]), + build_resize_convert_view (vec_type, operands[0]), + mask_vec); tree cleared = build2 (BIT_AND_EXPR, vec_type, perm, and_mask_vec); size_t s = int_size_in_bytes (TREE_TYPE (cleared)) * BITS_PER_UNIT; tree raw_type = build_nonstandard_integer_type (s, true); - tree as_int = build_reinterpret_cast (raw_type, cleared); + tree as_int = build_resize_convert_view (raw_type, cleared); if (int_size_in_bytes (src_element_type) < 4) { @@ -217,7 +218,7 @@ brig_basic_inst_handler::build_pack (tree_stl_vec &operands) size_t vecsize = int_size_in_bytes (TREE_TYPE (operands[0])) * BITS_PER_UNIT; tree wide_type = build_nonstandard_integer_type (vecsize, 1); - tree src_vect = build_reinterpret_cast (wide_type, operands[0]); + tree src_vect = build_resize_convert_view (wide_type, operands[0]); src_vect = add_temp_var ("src_vect", src_vect); tree scalar = operands[1]; @@ -650,10 +651,10 @@ brig_basic_inst_handler::operator () (const BrigBase *base) if (is_fp16_operation) old_value = build_h2f_conversion - (build_reinterpret_cast (half_storage_type, operands[0])); + (build_resize_convert_view (half_storage_type, operands[0])); else old_value - = build_reinterpret_cast (TREE_TYPE (instr_expr), operands[0]); + = build_resize_convert_view (TREE_TYPE (instr_expr), operands[0]); size_t esize = is_fp16_operation ? 32 : element_size_bits; diff --git a/gcc/brig/brigfrontend/brig-code-entry-handler.cc b/gcc/brig/brigfrontend/brig-code-entry-handler.cc index 240d8f6404b..35fa8a4ae65 100644 --- a/gcc/brig/brigfrontend/brig-code-entry-handler.cc +++ b/gcc/brig/brigfrontend/brig-code-entry-handler.cc @@ -137,14 +137,7 @@ brig_code_entry_handler::build_tree_operand (const BrigInstBase &brig_inst, correct size here so we don't need a separate unpack/pack for it. fp16-fp32 conversion is done in build_operands (). */ if (is_input && TREE_TYPE (element) != operand_type) - { - if (int_size_in_bytes (TREE_TYPE (element)) - == int_size_in_bytes (operand_type) - && !INTEGRAL_TYPE_P (operand_type)) - element = build1 (VIEW_CONVERT_EXPR, operand_type, element); - else - element = convert (operand_type, element); - } + element = build_resize_convert_view (operand_type, element); CONSTRUCTOR_APPEND_ELT (constructor_vals, NULL_TREE, element); ++operand_ptr; @@ -368,7 +361,7 @@ brig_code_entry_handler::build_address_operand to the array object. */ if (POINTER_TYPE_P (TREE_TYPE (arg_var_decl))) - symbol_base = build_reinterpret_cast (ptype, arg_var_decl); + symbol_base = build_resize_convert_view (ptype, arg_var_decl); else { /* In case we are referring to an array (the argument in @@ -436,7 +429,8 @@ brig_code_entry_handler::build_address_operand = (const BrigOperandRegister *) m_parent.get_brig_operand_entry (addr_operand.reg); tree base_reg_var = m_parent.m_cf->get_m_var_declfor_reg (mem_base_reg); - var_offset = convert_to_pointer (ptr_type_node, base_reg_var); + tree as_uint = build_reinterpret_to_uint (base_reg_var); + var_offset = convert_to_pointer (ptr_type_node, as_uint); gcc_assert (var_offset != NULL_TREE); } @@ -527,7 +521,10 @@ brig_code_entry_handler::build_tree_operand_from_brig = ((const uint32_t *) &operand_entries->bytes)[operand_index]; const BrigBase *operand_data = m_parent.get_brig_operand_entry (operand_offset); - return build_tree_operand (*brig_inst, *operand_data, operand_type); + + bool inputp = !gccbrig_hsa_opcode_op_output_p (brig_inst->opcode, + operand_index); + return build_tree_operand (*brig_inst, *operand_data, operand_type, inputp); } /* Builds a single (scalar) constant initialized element of type @@ -991,8 +988,8 @@ brig_code_entry_handler::expand_or_call_builtin (BrigOpcode16_t brig_opcode, call_operands.resize (4, NULL_TREE); operand_types.resize (4, NULL_TREE); for (size_t i = 0; i < operand_count; ++i) - call_operands.at (i) = build_reinterpret_cast (operand_types.at (i), - call_operands.at (i)); + call_operands.at (i) = build_resize_convert_view (operand_types.at (i), + call_operands.at (i)); tree fnptr = build_fold_addr_expr (built_in); return build_call_array (TREE_TYPE (TREE_TYPE (built_in)), fnptr, @@ -1140,6 +1137,28 @@ brig_code_entry_handler::build_h2f_conversion (tree source) tree_stl_vec brig_code_entry_handler::build_operands (const BrigInstBase &brig_inst) +{ + return build_or_analyze_operands (brig_inst, false); +} + +void +brig_code_entry_handler::analyze_operands (const BrigInstBase &brig_inst) +{ + build_or_analyze_operands (brig_inst, true); +} + +/* Implements both the build_operands () and analyze_operands () call + so changes go in tandem. Performs build_operands () when ANALYZE + is false. Otherwise, only analyze operands and return empty + list. + + If analyzing record each HSA register operand with the + corresponding resolved operand tree type to + brig_to_generic::m_fn_regs_use_index. */ + +tree_stl_vec +brig_code_entry_handler:: +build_or_analyze_operands (const BrigInstBase &brig_inst, bool analyze) { /* Flush to zero. */ bool ftz_mod = false; @@ -1327,9 +1346,19 @@ brig_code_entry_handler::build_operands (const BrigInstBase &brig_inst) /* Treat the operands as the storage type at this point. */ operand_type = half_storage_type; + if (analyze) + { + if (operand_data->kind == BRIG_KIND_OPERAND_REGISTER) + { + const BrigOperandRegister &brig_reg + = (const BrigOperandRegister &) *operand_data; + m_parent.add_reg_used_as_type (brig_reg, operand_type); + } + continue; + } + tree operand = build_tree_operand (brig_inst, *operand_data, operand_type, !is_output); - gcc_assert (operand); /* Cast/convert the inputs to correct types as expected by the GENERIC @@ -1338,36 +1367,17 @@ brig_code_entry_handler::build_operands (const BrigInstBase &brig_inst) { if (half_to_float) operand = build_h2f_conversion - (build_reinterpret_cast (half_storage_type, operand)); + (build_resize_convert_view (half_storage_type, operand)); else if (TREE_CODE (operand) != LABEL_DECL && TREE_CODE (operand) != TREE_VEC && operand_data->kind != BRIG_KIND_OPERAND_ADDRESS - && !VECTOR_TYPE_P (TREE_TYPE (operand))) + && operand_data->kind != BRIG_KIND_OPERAND_OPERAND_LIST) { - size_t reg_width = int_size_in_bytes (TREE_TYPE (operand)); - size_t instr_width = int_size_in_bytes (operand_type); - if (reg_width == instr_width) - operand = build_reinterpret_cast (operand_type, operand); - else if (reg_width > instr_width) - { - /* Clip the operand because the instruction's bitwidth - is smaller than the HSAIL reg width. */ - if (INTEGRAL_TYPE_P (operand_type)) - operand - = convert_to_integer (signed_or_unsigned_type_for - (TYPE_UNSIGNED (operand_type), - operand_type), operand); - else - operand = build_reinterpret_cast (operand_type, operand); - } - else if (reg_width < instr_width) - /* At least shift amount operands can be read from smaller - registers than the data operands. */ - operand = convert (operand_type, operand); + operand = build_resize_convert_view (operand_type, operand); } else if (brig_inst.opcode == BRIG_OPCODE_SHUFFLE) /* Force the operand type to be treated as the raw type. */ - operand = build_reinterpret_cast (operand_type, operand); + operand = build_resize_convert_view (operand_type, operand); if (brig_inst.opcode == BRIG_OPCODE_CMOV && i == 1) { @@ -1399,8 +1409,9 @@ tree brig_code_entry_handler::build_output_assignment (const BrigInstBase &brig_inst, tree output, tree inst_expr) { - /* The destination type might be different from the output register - variable type (which is always an unsigned integer type). */ + /* The result/input type might be different from the output register + variable type (can be any type; see get_m_var_declfor_reg @ + brig-function.cc). */ tree output_type = TREE_TYPE (output); tree input_type = TREE_TYPE (inst_expr); bool is_fp16 = (brig_inst.type & BRIG_TYPE_BASE_MASK) == BRIG_TYPE_F16 @@ -1440,12 +1451,12 @@ brig_code_entry_handler::build_output_assignment (const BrigInstBase &brig_inst, { inst_expr = add_temp_var ("before_f2h", inst_expr); tree f2h_output = build_f2h_conversion (inst_expr); - tree conv_int = convert_to_integer (output_type, f2h_output); - tree assign = build2 (MODIFY_EXPR, output_type, output, conv_int); + tree conv = build_resize_convert_view (output_type, f2h_output); + tree assign = build2 (MODIFY_EXPR, output_type, output, conv); m_parent.m_cf->append_statement (assign); return assign; } - else if (VECTOR_TYPE_P (TREE_TYPE (output))) + else if (VECTOR_TYPE_P (output_type) && TREE_CODE (output) == CONSTRUCTOR) { /* Expand/unpack the input value to the given vector elements. */ size_t i; @@ -1473,22 +1484,21 @@ brig_code_entry_handler::build_output_assignment (const BrigInstBase &brig_inst, bitwidths. */ size_t src_width = int_size_in_bytes (input_type); size_t dst_width = int_size_in_bytes (output_type); - - if (src_width == dst_width) - { - /* A simple bitcast should do. */ - tree bitcast = build_reinterpret_cast (output_type, inst_expr); - tree assign = build2 (MODIFY_EXPR, output_type, output, bitcast); - m_parent.m_cf->append_statement (assign); - return assign; - } - else + tree input = inst_expr; + /* Integer results are extended to the target register width, using + the same sign as the inst_expr. */ + if (INTEGRAL_TYPE_P (TREE_TYPE (input)) && src_width != dst_width) { - tree conv_int = convert_to_integer (output_type, inst_expr); - tree assign = build2 (MODIFY_EXPR, output_type, output, conv_int); - m_parent.m_cf->append_statement (assign); - return assign; + bool unsigned_p = TYPE_UNSIGNED (TREE_TYPE (input)); + tree resized_type + = build_nonstandard_integer_type (dst_width * BITS_PER_UNIT, + unsigned_p); + input = convert_to_integer (resized_type, input); } + input = build_resize_convert_view (output_type, input); + tree assign = build2 (MODIFY_EXPR, output_type, output, input); + m_parent.m_cf->append_statement (assign); + return assign; } return NULL_TREE; } @@ -1691,7 +1701,7 @@ float_to_half::visit_element (brig_code_entry_handler &caller, tree operand) { tree built_in = builtin_decl_explicit (BUILT_IN_HSAIL_F32_TO_F16); - tree casted_operand = build_reinterpret_cast (uint32_type_node, operand); + tree casted_operand = build_resize_convert_view (uint32_type_node, operand); tree call = call_builtin (built_in, 1, uint16_type_node, uint32_type_node, casted_operand); @@ -1720,7 +1730,7 @@ half_to_float::visit_element (brig_code_entry_handler &caller, tree operand) tree output = create_tmp_var (const_fp32_type, "fp32out"); tree casted_result - = build_reinterpret_cast (brig_to_generic::s_fp32_type, call); + = build_resize_convert_view (brig_to_generic::s_fp32_type, call); tree assign = build2 (MODIFY_EXPR, TREE_TYPE (output), output, casted_result); diff --git a/gcc/brig/brigfrontend/brig-code-entry-handler.h b/gcc/brig/brigfrontend/brig-code-entry-handler.h index dfbd14ce672..1c4ce1f6b82 100644 --- a/gcc/brig/brigfrontend/brig-code-entry-handler.h +++ b/gcc/brig/brigfrontend/brig-code-entry-handler.h @@ -89,6 +89,7 @@ class brig_code_entry_handler : public brig_entry_handler tree build_h2f_conversion (tree source); tree_stl_vec build_operands (const BrigInstBase &brig_inst); + void analyze_operands (const BrigInstBase &brig_inst); tree build_output_assignment (const BrigInstBase &brig_inst, tree output, tree inst_expr); @@ -105,6 +106,11 @@ class brig_code_entry_handler : public brig_entry_handler /* HSAIL-specific builtin functions not yet integrated to gcc. */ static builtin_map s_custom_builtins; + +private: + + tree_stl_vec build_or_analyze_operands (const BrigInstBase &brig_inst, + bool analyze); }; /* Implement the Visitor software pattern for performing various actions on diff --git a/gcc/brig/brigfrontend/brig-copy-move-inst-handler.cc b/gcc/brig/brigfrontend/brig-copy-move-inst-handler.cc index f853dc33d45..ce84599bbd1 100644 --- a/gcc/brig/brigfrontend/brig-copy-move-inst-handler.cc +++ b/gcc/brig/brigfrontend/brig-copy-move-inst-handler.cc @@ -53,12 +53,12 @@ brig_copy_move_inst_handler::operator () (const BrigBase *base) tree input = build_tree_operand_from_brig (brig_inst, source_type, 1); tree output = build_tree_operand_from_brig (brig_inst, dest_type, 0); + if (brig_inst->opcode == BRIG_OPCODE_COMBINE) { /* For combine, a simple reinterpret cast from the array constructor works. */ - - tree casted = build_reinterpret_cast (dest_type, input); + tree casted = build_resize_convert_view (TREE_TYPE (output), input); tree assign = build2 (MODIFY_EXPR, TREE_TYPE (output), output, casted); m_parent.m_cf->append_statement (assign); } diff --git a/gcc/brig/brigfrontend/brig-cvt-inst-handler.cc b/gcc/brig/brigfrontend/brig-cvt-inst-handler.cc index 0297f8b8892..18850a1fb8d 100644 --- a/gcc/brig/brigfrontend/brig-cvt-inst-handler.cc +++ b/gcc/brig/brigfrontend/brig-cvt-inst-handler.cc @@ -116,7 +116,7 @@ brig_cvt_inst_handler::generate (const BrigBase *base) /* Flush the float operand to zero if indicated with 'ftz'. */ if (FTZ && SCALAR_FLOAT_TYPE_P (src_type)) { - tree casted_input = build_reinterpret_cast (src_type, input); + tree casted_input = build_resize_convert_view (src_type, input); input = flush_to_zero (src_is_fp16) (*this, casted_input); } @@ -158,7 +158,8 @@ brig_cvt_inst_handler::generate (const BrigBase *base) } else gcc_unreachable (); - tree casted_input = build_reinterpret_cast (unsigned_int_type, input); + tree casted_input = build_resize_convert_view (unsigned_int_type, + input); tree masked_input = build2 (BIT_AND_EXPR, unsigned_int_type, casted_input, and_mask); conversion_result @@ -172,7 +173,7 @@ brig_cvt_inst_handler::generate (const BrigBase *base) } else if (dest_is_fp16) { - tree casted_input = build_reinterpret_cast (src_type, input); + tree casted_input = build_resize_convert_view (src_type, input); conversion_result = convert_to_real (brig_to_generic::s_fp32_type, casted_input); if (FTZ) @@ -181,7 +182,7 @@ brig_cvt_inst_handler::generate (const BrigBase *base) } else if (SCALAR_FLOAT_TYPE_P (dest_type)) { - tree casted_input = build_reinterpret_cast (src_type, input); + tree casted_input = build_resize_convert_view (src_type, input); conversion_result = convert_to_real (dest_type, casted_input); } else if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type)) @@ -214,46 +215,47 @@ brig_cvt_inst_handler::generate (const BrigBase *base) #include "brig-builtins.def" gcc_unreachable (); - tree casted_input = build_reinterpret_cast (src_type, input); + tree casted_input = build_resize_convert_view (src_type, input); conversion_result = call_builtin (builtin, 1, dest_type, src_type, casted_input); } else { - tree casted_input = build_reinterpret_cast (src_type, input); + tree casted_input = build_resize_convert_view (src_type, input); - /* Perform the int to float conversion. */ + /* Perform the float to int conversion. */ conversion_result = convert_to_integer (dest_type, casted_input); } - /* The converted result is finally extended to the target register - width, using the same sign as the destination. */ - conversion_result - = convert_to_integer (TREE_TYPE (output), conversion_result); } else { /* Just use CONVERT_EXPR and hope for the best. */ - tree casted_input = build_reinterpret_cast (dest_type, input); + tree casted_input = build_resize_convert_view (dest_type, input); conversion_result = build1 (CONVERT_EXPR, dest_type, casted_input); } size_t dst_reg_size = int_size_in_bytes (TREE_TYPE (output)); - tree assign = NULL_TREE; /* The output register can be of different type&size than the - conversion output size. Cast it to the register variable type. */ - if (dst_reg_size > conv_dst_size) - { - tree casted_output - = build1 (CONVERT_EXPR, TREE_TYPE (output), conversion_result); - assign = build2 (MODIFY_EXPR, TREE_TYPE (output), output, casted_output); - } - else + conversion output size. Only need to handle signed integers, rest + is handled by reinterpret_cast. */ + tree casted_output = conversion_result; + if (dst_reg_size > conv_dst_size && + INTEGRAL_TYPE_P (TREE_TYPE (casted_output))) { - tree casted_output - = build_reinterpret_cast (TREE_TYPE (output), conversion_result); - assign = build2 (MODIFY_EXPR, TREE_TYPE (output), output, casted_output); + gcc_assert (!VECTOR_TYPE_P (casted_output)); + + bool unsignedp = TYPE_UNSIGNED (TREE_TYPE (casted_output)); + tree resized_int_type + = build_nonstandard_integer_type (dst_reg_size * BITS_PER_UNIT, + unsignedp); + casted_output = build1 (CONVERT_EXPR, resized_int_type, casted_output); } + + casted_output + = build_resize_convert_view (TREE_TYPE (output), casted_output); + tree assign = build2 (MODIFY_EXPR, TREE_TYPE (output), output, casted_output); + m_parent.m_cf->append_statement (assign); return base->byteCount; diff --git a/gcc/brig/brigfrontend/brig-function.cc b/gcc/brig/brigfrontend/brig-function.cc index 59d2aa5c095..f45339c5d39 100644 --- a/gcc/brig/brigfrontend/brig-function.cc +++ b/gcc/brig/brigfrontend/brig-function.cc @@ -272,32 +272,59 @@ brig_function::add_local_variable (std::string name, tree type) return variable; } +/* Return tree type for an HSA register. + + The tree type can be anything (scalar, vector, int, float, etc.) + but its size is guaranteed to match the HSA register size. + + HSA registers are untyped but we select a type based on their use + to reduce (sometimes unoptimizable) VIEW_CONVERT_EXPR nodes (seems + to occur when use or def reaches over current BB). */ + +tree +brig_function::get_tree_type_for_hsa_reg (const BrigOperandRegister *reg) const +{ + size_t reg_size = gccbrig_reg_size (reg); + + /* The default type. */ + tree type = build_nonstandard_integer_type (reg_size, true); + + if (m_parent->m_fn_regs_use_index.count (m_name) == 0) + return type; + + const regs_use_index &index = m_parent->m_fn_regs_use_index[m_name]; + size_t reg_id = gccbrig_hsa_reg_id (*reg); + if (index.count (reg_id) == 0) + return type; + + const reg_use_info &info = index.find (reg_id)->second; + std::vector >::const_iterator it + = info.m_type_refs.begin (); + std::vector >::const_iterator it_end + = info.m_type_refs.end (); + size_t max_refs_as_type_count = 0; + for (; it != it_end; it++) + { + size_t type_bit_size = int_size_in_bytes (it->first) * BITS_PER_UNIT; + if (type_bit_size != reg_size) continue; + if (it->second > max_refs_as_type_count) + { + type = it->first; + max_refs_as_type_count = it->second; + } + } + + return type; +} + /* Returns a DECL_VAR for the given HSAIL operand register. If it has not been created yet for the function being generated, - creates it as an unsigned int variable. */ + creates it as a type determined by analysis phase. */ tree brig_function::get_m_var_declfor_reg (const BrigOperandRegister *reg) { - size_t offset = reg->regNum; - switch (reg->regKind) - { - case BRIG_REGISTER_KIND_QUAD: - offset - += BRIG_2_TREE_HSAIL_D_REG_COUNT + BRIG_2_TREE_HSAIL_S_REG_COUNT + - BRIG_2_TREE_HSAIL_C_REG_COUNT; - break; - case BRIG_REGISTER_KIND_DOUBLE: - offset += BRIG_2_TREE_HSAIL_S_REG_COUNT + BRIG_2_TREE_HSAIL_C_REG_COUNT; - break; - case BRIG_REGISTER_KIND_SINGLE: - offset += BRIG_2_TREE_HSAIL_C_REG_COUNT; - case BRIG_REGISTER_KIND_CONTROL: - break; - default: - gcc_unreachable (); - break; - } + size_t offset = gccbrig_hsa_reg_id (*reg); reg_decl_index_entry *regEntry = m_regs[offset]; if (regEntry == NULL) @@ -305,7 +332,7 @@ brig_function::get_m_var_declfor_reg (const BrigOperandRegister *reg) size_t reg_size = gccbrig_reg_size (reg); tree type; if (reg_size > 1) - type = build_nonstandard_integer_type (reg_size, true); + type = get_tree_type_for_hsa_reg (reg); else type = boolean_type_node; diff --git a/gcc/brig/brigfrontend/brig-function.h b/gcc/brig/brigfrontend/brig-function.h index 2a85f5e69fe..3ed58cdc67a 100644 --- a/gcc/brig/brigfrontend/brig-function.h +++ b/gcc/brig/brigfrontend/brig-function.h @@ -45,15 +45,6 @@ typedef std::map label_index; typedef std::map variable_index; typedef std::vector tree_stl_vec; -/* There are 128 c regs and 2048 s/d/q regs each in the HSAIL. */ -#define BRIG_2_TREE_HSAIL_C_REG_COUNT (128) -#define BRIG_2_TREE_HSAIL_S_REG_COUNT (2048) -#define BRIG_2_TREE_HSAIL_D_REG_COUNT (2048) -#define BRIG_2_TREE_HSAIL_Q_REG_COUNT (2048) -#define BRIG_2_TREE_HSAIL_TOTAL_REG_COUNT \ - (BRIG_2_TREE_HSAIL_C_REG_COUNT + BRIG_2_TREE_HSAIL_S_REG_COUNT \ - + BRIG_2_TREE_HSAIL_D_REG_COUNT + BRIG_2_TREE_HSAIL_Q_REG_COUNT) - /* Holds data for the currently built GENERIC function. */ class brig_function @@ -222,6 +213,9 @@ class brig_function phsa_descriptor m_descriptor; private: + + tree get_tree_type_for_hsa_reg (const BrigOperandRegister *reg) const; + /* Bookkeeping for the different HSA registers and their tree declarations for the currently generated function. */ reg_decl_index_entry *m_regs[BRIG_2_TREE_HSAIL_TOTAL_REG_COUNT]; diff --git a/gcc/brig/brigfrontend/brig-mem-inst-handler.cc b/gcc/brig/brigfrontend/brig-mem-inst-handler.cc index 2b245a11dfe..fea3059edd9 100644 --- a/gcc/brig/brigfrontend/brig-mem-inst-handler.cc +++ b/gcc/brig/brigfrontend/brig-mem-inst-handler.cc @@ -41,7 +41,11 @@ brig_mem_inst_handler::build_mem_access (const BrigInstBase *brig_inst, tree instr_type = gccbrig_tree_type_for_hsa_type (brig_inst->type); - if (VECTOR_TYPE_P (TREE_TYPE (data))) + /* In case of {ld,st}_v{2,4}. Note: since 'register' variables may + be any type, even a vector type, we distinguish the registers + from operand lists by checking for constructor nodes (which + operand lists are represented as). */ + if (VECTOR_TYPE_P (TREE_TYPE (data)) && TREE_CODE (data) == CONSTRUCTOR) instr_type = TREE_TYPE (data); tree ptype = build_pointer_type (instr_type); @@ -151,14 +155,7 @@ brig_mem_inst_handler::operator () (const BrigBase *base) address_base, ptr_offset); if (is_store && TREE_TYPE (data) != instr_type) - { - if (int_size_in_bytes (TREE_TYPE (data)) - == int_size_in_bytes (instr_type) - && !INTEGRAL_TYPE_P (instr_type)) - data = build1 (VIEW_CONVERT_EXPR, instr_type, data); - else - data = convert (instr_type, data); - } + data = build_resize_convert_view (instr_type, data); build_mem_access (brig_inst, address, data); diff --git a/gcc/brig/brigfrontend/brig-to-generic.cc b/gcc/brig/brigfrontend/brig-to-generic.cc index 41246ba2bfc..9077e76364e 100644 --- a/gcc/brig/brigfrontend/brig-to-generic.cc +++ b/gcc/brig/brigfrontend/brig-to-generic.cc @@ -124,6 +124,24 @@ class skipped_entry_handler : public brig_code_entry_handler } }; +class brig_reg_use_analyzer : public brig_code_entry_handler +{ +public: + brig_reg_use_analyzer (brig_to_generic &parent) + : brig_code_entry_handler (parent) + { + } + + size_t + operator () (const BrigBase *base) + { + const BrigInstBase *brig_inst = (const BrigInstBase *) base; + analyze_operands (*brig_inst); + return base->byteCount; + } + +}; + /* Helper struct for pairing a BrigKind and a BrigCodeEntryHandler that should handle its data. */ @@ -210,6 +228,7 @@ brig_to_generic::analyze (const char *brig_blob) brig_directive_variable_handler var_handler (*this); brig_directive_fbarrier_handler fbar_handler (*this); brig_directive_function_handler func_handler (*this); + brig_reg_use_analyzer reg_use_analyzer (*this); /* Need this for grabbing the module names for mangling the group variable names. */ @@ -219,7 +238,21 @@ brig_to_generic::analyze (const char *brig_blob) const BrigSectionHeader *csection_header = (const BrigSectionHeader *) m_code; code_entry_handler_info handlers[] - = {{BRIG_KIND_DIRECTIVE_VARIABLE, &var_handler}, + = {{BRIG_KIND_INST_BASIC, ®_use_analyzer}, + {BRIG_KIND_INST_MOD, ®_use_analyzer}, + {BRIG_KIND_INST_CMP, ®_use_analyzer}, + {BRIG_KIND_INST_MEM, ®_use_analyzer}, + {BRIG_KIND_INST_CVT, ®_use_analyzer}, + {BRIG_KIND_INST_SEG_CVT, ®_use_analyzer}, + {BRIG_KIND_INST_SEG, ®_use_analyzer}, + {BRIG_KIND_INST_ADDR, ®_use_analyzer}, + {BRIG_KIND_INST_SOURCE_TYPE, ®_use_analyzer}, + {BRIG_KIND_INST_ATOMIC, ®_use_analyzer}, + {BRIG_KIND_INST_SIGNAL, ®_use_analyzer}, + {BRIG_KIND_INST_BR, ®_use_analyzer}, + {BRIG_KIND_INST_LANE, ®_use_analyzer}, + {BRIG_KIND_INST_QUEUE, ®_use_analyzer}, + {BRIG_KIND_DIRECTIVE_VARIABLE, &var_handler}, {BRIG_KIND_DIRECTIVE_FBARRIER, &fbar_handler}, {BRIG_KIND_DIRECTIVE_KERNEL, &func_handler}, {BRIG_KIND_DIRECTIVE_MODULE, &module_handler}, @@ -555,10 +588,14 @@ build_stmt (enum tree_code code, ...) than the created reg var type in order to select correct instruction type later on. This function creates the necessary reinterpret type cast from a source variable to the destination type. In case no cast is needed to - the same type, SOURCE is returned directly. */ + the same type, SOURCE is returned directly. + + In case of mismatched type sizes, casting: + - to narrower type the upper bits are clipped and + - to wider type the source value is zero extended. */ tree -build_reinterpret_cast (tree destination_type, tree source) +build_resize_convert_view (tree destination_type, tree source) { gcc_assert (source && destination_type && TREE_TYPE (source) != NULL_TREE @@ -578,23 +615,30 @@ build_reinterpret_cast (tree destination_type, tree source) size_t dst_size = int_size_in_bytes (destination_type); if (src_size == dst_size) return build1 (VIEW_CONVERT_EXPR, destination_type, source); - else if (src_size < dst_size) + else /* src_size != dst_size */ { /* The src_size can be smaller at least with f16 scalars which are stored to 32b register variables. First convert to an equivalent size unsigned type, then extend to an unsigned type of the target width, after which VIEW_CONVERT_EXPR can be used to force to the target type. */ - tree unsigned_temp = build1 (VIEW_CONVERT_EXPR, - get_unsigned_int_type (source_type), - source); - return build1 (VIEW_CONVERT_EXPR, destination_type, - convert (get_unsigned_int_type (destination_type), - unsigned_temp)); + tree resized = convert (get_scalar_unsigned_int_type (destination_type), + build_reinterpret_to_uint (source)); + gcc_assert ((size_t)int_size_in_bytes (TREE_TYPE (resized)) == dst_size); + return build_resize_convert_view (destination_type, resized); } - else - gcc_unreachable (); - return NULL_TREE; +} + +/* Reinterprets SOURCE as a scalar unsigned int with the size + corresponding to the orignal. */ + +tree build_reinterpret_to_uint (tree source) +{ + tree src_type = TREE_TYPE (source); + if (INTEGRAL_TYPE_P (src_type) && TYPE_UNSIGNED (src_type)) + return source; + tree dest_type = get_scalar_unsigned_int_type (src_type); + return build1 (VIEW_CONVERT_EXPR, dest_type, source); } /* Returns the finished brig_function for the given generic FUNC_DECL, @@ -775,7 +819,7 @@ call_builtin (tree pdecl, int nargs, tree rettype, ...) { types[i] = va_arg (ap, tree); tree arg = va_arg (ap, tree); - args[i] = build_reinterpret_cast (types[i], arg); + args[i] = build_resize_convert_view (types[i], arg); if (types[i] == error_mark_node || args[i] == error_mark_node) { delete[] types; @@ -879,6 +923,16 @@ get_unsigned_int_type (tree original_type) true); } +/* Returns a type with unsigned int corresponding to the size + ORIGINAL_TYPE. */ + +tree +get_scalar_unsigned_int_type (tree original_type) +{ + return build_nonstandard_integer_type (int_size_in_bytes (original_type) + * BITS_PER_UNIT, true); +} + void dump_function (FILE *dump_file, brig_function *f) { @@ -893,3 +947,22 @@ dump_function (FILE *dump_file, brig_function *f) fprintf (dump_file, "\n"); } } + +/* Records use of the BRIG_REG as a TYPE in the current function. */ + +void +brig_to_generic::add_reg_used_as_type (const BrigOperandRegister &brig_reg, + tree type) +{ + gcc_assert (m_cf); + reg_use_info &info + = m_fn_regs_use_index[m_cf->m_name][gccbrig_hsa_reg_id (brig_reg)]; + + if (info.m_type_refs_lookup.count (type)) + info.m_type_refs[info.m_type_refs_lookup[type]].second++; + else + { + info.m_type_refs.push_back (std::make_pair (type, 1)); + info.m_type_refs_lookup[type] = info.m_type_refs.size () - 1; + } +} diff --git a/gcc/brig/brigfrontend/brig-to-generic.h b/gcc/brig/brigfrontend/brig-to-generic.h index 0070894dd26..59eb5b49188 100644 --- a/gcc/brig/brigfrontend/brig-to-generic.h +++ b/gcc/brig/brigfrontend/brig-to-generic.h @@ -106,6 +106,9 @@ class brig_to_generic void add_group_variable (const std::string &name, size_t size, size_t alignment, bool function_scope); + void add_reg_used_as_type (const BrigOperandRegister &brig_reg, + tree operand_type); + static tree s_fp16_type; static tree s_fp32_type; static tree s_fp64_type; @@ -129,6 +132,9 @@ class brig_to_generic /* Accumulates the total group segment usage. */ size_t m_total_group_segment_usage; + /* Statistics about register uses per function. */ + std::map m_fn_regs_use_index; + private: void find_brig_sections (); @@ -212,12 +218,15 @@ class brig_entry_handler tree call_builtin (tree pdecl, int nargs, tree rettype, ...); -tree build_reinterpret_cast (tree destination_type, tree source); +tree build_resize_convert_view (tree destination_type, tree source); +tree build_reinterpret_to_uint (tree source); tree build_stmt (enum tree_code code, ...); tree get_unsigned_int_type (tree type); +tree get_scalar_unsigned_int_type (tree type); + void dump_function (FILE *dump_file, brig_function *f); #endif diff --git a/gcc/brig/brigfrontend/brig-util.cc b/gcc/brig/brigfrontend/brig-util.cc index a8684de9131..ca93247e7ff 100644 --- a/gcc/brig/brigfrontend/brig-util.cc +++ b/gcc/brig/brigfrontend/brig-util.cc @@ -26,6 +26,7 @@ along with GCC; see the file COPYING3. If not see #include "brig-util.h" #include "errors.h" #include "diagnostic-core.h" +#include "print-tree.h" bool group_variable_offset_index::has_variable (const std::string &name) const @@ -473,3 +474,91 @@ gccbrig_tree_type_for_hsa_type (BrigType16_t brig_type) /* Drop const qualifiers. */ return tree_type; } + +/* Calculates numeric identifier for the HSA register REG. + + Returned value is bound to [0, BRIG_2_TREE_HSAIL_TOTAL_REG_COUNT]. */ + +size_t +gccbrig_hsa_reg_id (const BrigOperandRegister ®) +{ + size_t offset = reg.regNum; + switch (reg.regKind) + { + case BRIG_REGISTER_KIND_QUAD: + offset + += BRIG_2_TREE_HSAIL_D_REG_COUNT + BRIG_2_TREE_HSAIL_S_REG_COUNT + + BRIG_2_TREE_HSAIL_C_REG_COUNT; + break; + case BRIG_REGISTER_KIND_DOUBLE: + offset += BRIG_2_TREE_HSAIL_S_REG_COUNT + BRIG_2_TREE_HSAIL_C_REG_COUNT; + break; + case BRIG_REGISTER_KIND_SINGLE: + offset += BRIG_2_TREE_HSAIL_C_REG_COUNT; + case BRIG_REGISTER_KIND_CONTROL: + break; + default: + gcc_unreachable (); + break; + } + return offset; +} + +std::string +gccbrig_hsa_reg_name_from_id (size_t reg_hash) +{ + char reg_name[32]; + if (reg_hash < BRIG_2_TREE_HSAIL_C_REG_COUNT) + { + sprintf (reg_name, "$c%lu", reg_hash); + return reg_name; + } + + reg_hash -= BRIG_2_TREE_HSAIL_C_REG_COUNT; + if (reg_hash < BRIG_2_TREE_HSAIL_S_REG_COUNT) + { + sprintf (reg_name, "$s%lu", reg_hash); + return reg_name; + } + + reg_hash -= BRIG_2_TREE_HSAIL_S_REG_COUNT; + if (reg_hash < BRIG_2_TREE_HSAIL_D_REG_COUNT) + { + sprintf (reg_name, "$d%lu", reg_hash); + return reg_name; + } + + reg_hash -= BRIG_2_TREE_HSAIL_D_REG_COUNT; + if (reg_hash < BRIG_2_TREE_HSAIL_Q_REG_COUNT) + { + sprintf (reg_name, "$q%lu", reg_hash); + return reg_name; + } + + gcc_unreachable (); + return "$??"; +} + +/* Prints statistics of register usage to stdout. */ + +void +gccbrig_print_reg_use_info (FILE *dump, const regs_use_index &info) +{ + regs_use_index::const_iterator begin_it = info.begin (); + regs_use_index::const_iterator end_it = info.end (); + for (regs_use_index::const_iterator it = begin_it; it != end_it; it++) + { + std::string hsa_reg = gccbrig_hsa_reg_name_from_id (it->first); + printf ("%s:\n", hsa_reg.c_str ()); + const reg_use_info &info = it->second; + typedef std::vector >::const_iterator reg_use_it; + reg_use_it begin_it2 = info.m_type_refs.begin (); + reg_use_it end_it2 = info.m_type_refs.end (); + for (reg_use_it it2 = begin_it2; it2 != end_it2; it2++) + { + fprintf (dump, "(%lu) ", it2->second); + print_node_brief (dump, "", it2->first, 0); + fprintf (dump, "\n"); + } + } +} diff --git a/gcc/brig/brigfrontend/brig-util.h b/gcc/brig/brigfrontend/brig-util.h index c90ff29d0fd..d47470f0c40 100644 --- a/gcc/brig/brigfrontend/brig-util.h +++ b/gcc/brig/brigfrontend/brig-util.h @@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see #define GCC_BRIG_UTIL_H #include +#include #include "config.h" #include "system.h" @@ -31,6 +32,15 @@ along with GCC; see the file COPYING3. If not see #include "opts.h" #include "tree.h" +/* There are 128 c regs and 2048 s/d/q regs each in the HSAIL. */ +#define BRIG_2_TREE_HSAIL_C_REG_COUNT (128) +#define BRIG_2_TREE_HSAIL_S_REG_COUNT (2048) +#define BRIG_2_TREE_HSAIL_D_REG_COUNT (2048) +#define BRIG_2_TREE_HSAIL_Q_REG_COUNT (2048) +#define BRIG_2_TREE_HSAIL_TOTAL_REG_COUNT \ + (BRIG_2_TREE_HSAIL_C_REG_COUNT + BRIG_2_TREE_HSAIL_S_REG_COUNT \ + + BRIG_2_TREE_HSAIL_D_REG_COUNT + BRIG_2_TREE_HSAIL_Q_REG_COUNT) + /* Helper class for keeping book of group variable offsets. */ class group_variable_offset_index @@ -76,4 +86,25 @@ bool gccbrig_might_be_host_defined_var_p (const BrigDirectiveVariable *brigVar); /* From hsa.h. */ bool hsa_type_packed_p (BrigType16_t type); +struct reg_use_info +{ + /* This vector keeps count of the times an HSAIL register is used as + a tree type in generic expressions. The count is used to select + type for 'register' variables to reduce emission of + VIEW_CONVERT_EXPR nodes. The data is kept in vector (insertion + order) for determinism, in a case there is a tie with the + counts. */ + std::vector > m_type_refs; + /* Tree to index. Lookup for the above vector. */ + std::map m_type_refs_lookup; +}; + +/* key = hsa register entry generated by gccbrig_hsa_reg_id (). */ +typedef std::map regs_use_index; + +size_t gccbrig_hsa_reg_id (const BrigOperandRegister ®); +std::string gccbrig_hsa_reg_name_from_id (size_t reg_hash); + +void gccbrig_print_reg_use_info (FILE *dump, const regs_use_index &info); + #endif diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d88bfb7e63b..73d08c248db 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,3011 @@ +2017-11-16 Henry Linjamäki + + * brig.dg/test/gimple/vector.hsail: Update for HSA registers' tree + representation changes in brig1. + * brig.dg/test/gimple/packed.hsail: Likewise. + * brig.dg/test/gimple/internal-reg-var-casts.hsail: New. + +2017-11-16 Jan Hubicka + + * gcc.dg/ipa/ipcp-2.c: Lower threshold. + +2017-11-16 Martin Sebor + + PR middle-end/63477 + * gcc.dg/pr63477.c: New test. + +2017-11-16 Martin Sebor + + PR tree-optimization/82588 + PR tree-optimization/82583 + * c-c++-common/Warray-bounds.c: New test. + * gcc.dg/Warray-bounds-11.c: Adjust. + * gcc.dg/Warray-bounds-22.c: New test. + +2017-11-16 Nathan Sidwell + + PR c++/82836 + PR c++/82737 + * g++.dg/pr82836.C: New. + + PR c++81060 + * g++.dg/cpp0x/lambda/lambda-template13.C: Avoid undefined + template using local type error. + * g++.dg/cpp0x/pr81060.C: New. + +2017-11-16 Wilco Dijkstra + Jackson Woodruff + + PR tree-optimization/71026 + * gcc.dg/cse_recip.c: New test. + +2017-11-16 Wilco Dijkstra + + * gcc.target/aarch64/lr_free_2.c: Fix test. + * gcc.target/aarch64/spill_1.c: Likewise. + * gcc.target/aarch64/test_frame_11.c: Likewise. + * gcc.target/aarch64/test_frame_12.c: Likewise. + * gcc.target/aarch64/test_frame_13.c: Likewise. + * gcc.target/aarch64/test_frame_14.c: Likewise. + * gcc.target/aarch64/test_frame_15.c: Likewise. + * gcc.target/aarch64/test_frame_3.c: Likewise. + * gcc.target/aarch64/test_frame_5.c: Likewise. + * gcc.target/aarch64/test_frame_9.c: Likewise. + +2017-11-16 Paolo Carlini + + PR c++/70383 + * g++.dg/cpp0x/lambda/lambda-70383.C: New. + +2017-11-16 Julia Koval + + * gcc.target/i386/avx512f-gf2p8mulb-2.c: New runtime tests. + * gcc.target/i386/avx512vl-gf2p8mulb-2.c: Ditto. + * gcc.target/i386/gfni-1.c: Add tests for GF2P8MUL. + * gcc.target/i386/gfni-2.c: Ditto. + * gcc.target/i386/gfni-3.c: Ditto. + * gcc.target/i386/gfni-4.c: Ditto. + +2017-11-15 Bill Schmidt + + * gcc.target/powerpc/swaps-p8-26.c: Modify expected code + generation. + +2017-11-15 Martin Sebor + + PR testsuite/82988 + * g++.dg/cpp0x/lambda/lambda-switch.C: Prune unimportant warning. + +2017-11-15 H.J. Lu + + PR target/82990 + * gcc.target/i386/pr82942-2.c: Add -mtune=knl. + * gcc.target/i386/pr82990-1.c: New test. + * gcc.target/i386/pr82990-2.c: Likewise. + * gcc.target/i386/pr82990-3.c: Likewise. + * gcc.target/i386/pr82990-4.c: Likewise. + * gcc.target/i386/pr82990-5.c: Likewise. + * gcc.target/i386/pr82990-6.c: Likewise. + * gcc.target/i386/pr82990-7.c: Likewise. + +2017-11-15 Will Schmidt + + * gcc.target/powerpc/builtins-3-p9.c: Add -O1, update + expected codegen checks. + * gcc.target/powerpc/vec-cmp-sel.c: Mark vars as volatile. + * gcc.target/powerpc/vsu/vec-cmpne-0.c: Add -O1. + * gcc.target/powerpc/vsu/vec-cmpne-1.c: Add -O1. + * gcc.target/powerpc/vsu/vec-cmpne-2.c: Add -O1. + * gcc.target/powerpc/vsu/vec-cmpne-3.c: Add -O1. + * gcc.target/powerpc/vsu/vec-cmpne-4.c: Add -O1. + * gcc.target/powerpc/vsu/vec-cmpne-5.c: Add -O1. + * gcc.target/powerpc/vsu/vec-cmpne-6.c: Add -O1. + +2017-11-15 Steven G. Kargl + + PR fortran/78240 + gfortran.dg/pr78240.f90: Prune run-on errors. + +2017-11-15 Bin Cheng + + PR tree-optimization/82726 + * gcc.dg/tree-ssa/pr82726.c: New test. + +2017-11-15 Sudakshina Das + + * g++.dg/ext/pr57735.C: Add -Wno-return-type for test. + * gcc.target/arm/pr54300.C (main): Add return type and + return a value. + +2017-11-15 Tom de Vries + + * gcc.dg/strncpy-fix-1.c: Add -Wno-stringop-truncation to dg-options. + +2017-11-15 Dominique d'Humieres + + * gcc.target/i386/pr81706.c: Adjust asm for darwin. + * g++.dg/ext/pr81706.C: Likewise. + +2017-11-15 Nathan Sidwell + + PR c++/81574 + * g++.dg/cpp1y/pr81574.C: New. + +2017-11-15 Richard Biener + + PR tree-optimization/82985 + * g++.dg/torture/pr82985.C: Likewise. + +2017-11-15 Sebastian Peryt + + PR target/82941 + PR target/82942 + * gcc.target/i386/pr82941-1.c: New test. + * gcc.target/i386/pr82941-2.c: New test. + * gcc.target/i386/pr82942-1.c: New test. + * gcc.target/i386/pr82942-2.c: New test. + +2017-11-15 Rainer Orth + + * g++.dg/cpp0x/rv-trivial-bug.C (test2): Return a value. + +2017-11-15 Jakub Jelinek + + PR target/82981 + * gcc.target/mips/pr82981.c: New test. + +2017-11-15 Martin Liska + + * g++.dg/ubsan/vptr-12.C: New test. + +2017-11-15 Joseph Myers + + PR c/81156 + * gcc.dg/builtin-tgmath-1.c, gcc.dg/builtin-tgmath-2.c, + gcc.dg/builtin-tgmath-err-1.c, gcc.dg/builtin-tgmath-err-2.c, + gcc.dg/dfp/builtin-tgmath-dfp-err.c, + gcc.dg/dfp/builtin-tgmath-dfp.c: New tests. + +2017-11-14 Michael Meissner + + * gcc.target/powerpc/float128-hw4.c: New test. + +2017-11-14 Rainer Orth + + * lib/target-supports.exp (check_effective_target_pie): Adapt + comment for Solaris 12 renaming. + + * gcc.dg/torture/pr60092.c: Remove *-*-solaris2.11* dg-xfail-run-if. + +2017-11-14 Carl Love + + * builtins-revb-runnable.c (dg-do run): Add lp64 directive. Fix + indentation of printf and abort statements. + * p9-xxbr-1.c (dg-do compile): Add lp64 && p9vector_h directives. + +2017-11-14 James Greenhalgh + + * gcc.target/aarch64/bsl-idiom.c: New. + * gcc.target/aarch64/copysign-bsl.c: New. + +2017-11-14 Tom de Vries + + * c-c++-common/Wstringop-truncation.c: Require effective target alloca. + +2017-11-13 Jan Hubicka + + * gcc.dg/tree-ssa/fnsplit-2.c: New testcase. + +2017-11-13 Fritz Reese + + PR fortran/78240 + * gfortran.dg/dec_structure_23.f90: New. + * gfortran.dg/pr78240.f90: New. + +2017-11-13 Carl Love + + * gcc.target/powerpc/builtin-vec-sums-be-int.c: New test file. + +2017-11-13 Tom Tromey + + * c-c++-common/cpp/va-opt-pedantic.c: New file. + * c-c++-common/cpp/va-opt.c: New file. + * c-c++-common/cpp/va-opt-error.c: New file. + +2017-11-13 Carl Love + + * gcc.target/powerpc/builtins-6-p9-runnable.c: Add new runnable test. + * gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c: Update expected error + message. + +2017-11-13 Michael Meissner + + * gcc.target/powerpc/float128-minmax.c: New test. + +2017-11-13 Christophe Lyon + + * gcc.target/arm/pr67989.C: Add -Wno-return-type to + dg-additional-options. + +2017-11-13 Nathan Sidwell + + * lib/gcc-dg.exp (process-message): Use -: for no column. + * c-c++-common/cilk-plus/CK/cilk_for_grain_errors.c: Mark elided + column messages. + * c-c++-common/cpp/pr58844-1.c: Likewise. + * c-c++-common/cpp/pr58844-2.c: Likewise. + * c-c++-common/cpp/warning-zero-location.c: Likewise. + * g++.dg/diagnostic/pr77949.C: Likewise. + * g++.dg/gomp/macro-4.C: Likewise. + * gcc.dg/Wunknownprag.c: Likewise. + * gcc.dg/builtin-redefine.c: Likewise. + * gcc.dg/cpp/Wunknown-pragmas-1.c: Likewise. + * gcc.dg/cpp/Wunused.c: Likewise. + * gcc.dg/cpp/misspelled-directive-1.c: Likewise. + * gcc.dg/cpp/redef2.c: Likewise. + * gcc.dg/cpp/redef3.c: Likewise. + * gcc.dg/cpp/redef4.c: Likewise. + * gcc.dg/cpp/trad/Wunused.c: Likewise. + * gcc.dg/cpp/trad/argcount.c: Likewise. + * gcc.dg/cpp/trad/comment-3.c: Likewise. + * gcc.dg/cpp/trad/comment.c: Likewise. + * gcc.dg/cpp/trad/defined.c: Likewise. + * gcc.dg/cpp/trad/directive.c: Likewise. + * gcc.dg/cpp/trad/funlike-3.c: Likewise. + * gcc.dg/cpp/trad/funlike.c: Likewise. + * gcc.dg/cpp/trad/literals-2.c: Likewise. + * gcc.dg/cpp/trad/macro.c: Likewise. + * gcc.dg/cpp/trad/pr65238-4.c: Likewise. + * gcc.dg/cpp/trad/recurse-1.c: Likewise. + * gcc.dg/cpp/trad/recurse-2.c: Likewise. + * gcc.dg/cpp/trad/redef2.c: Likewise. + * gcc.dg/cpp/ucnid-11.c: Likewise. + * gcc.dg/cpp/unc1.c: Likewise. + * gcc.dg/cpp/unc2.c: Likewise. + * gcc.dg/cpp/unc3.c: Likewise. + * gcc.dg/cpp/unc4.c: Likewise. + * gcc.dg/cpp/undef2.c: Likewise. + * gcc.dg/cpp/warn-redefined-2.c: Likewise. + * gcc.dg/cpp/warn-redefined.c: Likewise. + * gcc.dg/cpp/warn-unused-macros-2.c: Likewise. + * gcc.dg/cpp/warn-unused-macros.c: Likewise. + * gcc.dg/empty-source-2.c: Likewise. + * gcc.dg/empty-source-3.c: Likewise. + * gcc.dg/gomp/macro-4.c: Likewise. + * gcc.dg/noncompile/pr35447-1.c: Likewise. + * gcc.dg/plugin/location-overflow-test-1.c: Likewise. + * gcc.dg/pr20245-1.c: Likewise. + * gcc.dg/pr28419.c: Likewise. + * gcc.dg/rtl/truncated-rtl-file.c: Likewise. + * gcc.dg/unclosed-init.c: Likewise. + +2017-11-13 Charles Baylis + + * gfortran.dg/ieee/ieee_8.f90: xfail for aarch64*-*-gnu* + +2017-11-13 Jakub Jelinek + + PR tree-optimization/78821 + * gcc.dg/store_merging_15.c: New test. + + PR tree-optimization/82954 + * gcc.c-torture/execute/pr82954.c: New test. + +2017-11-11 Janus Weil + + PR fortran/82932 + * gfortran.dg/typebound_call_29.f90: New test. + +2017-11-10 Fritz Reese + + PR fortran/82886 + * gfortran.dg/init_flag_16.f03: New testcase. + +2017-11-10 Michael Meissner + + * gcc.target/powerpc/p9-xxbr-3.c: New test. + +2017-11-10 Uros Bizjak + + * gcc.target/i386/force-indirect-call-1.c: Merge scan strings. + * gcc.target/i386/force-indirect-call-2.c: Ditto. + Require fpic effective target. + * gcc.target/i386/force-indirect-call-3.c: Ditto. + Require lp64 effective target. + +2017-11-10 Julia Koval + + * gcc.target/i386/avx-1.c: Handle new intrinsics. + * gcc.target/i386/avx512f-gf2p8affineqb-2.c: New runtime tests. + * gcc.target/i386/avx512vl-gf2p8affineqb-2.c: Ditto. + * gcc.target/i386/gfni-1.c: Add tests for GF2P8AFFINE. + * gcc.target/i386/gfni-2.c: Ditto. + * gcc.target/i386/gfni-3.c: Ditto. + * gcc.target/i386/gfni-4.c: Ditto. + * gcc.target/i386/sse-13.c: Handle new tests. + * gcc.target/i386/sse-14.c: Handle new tests. + * gcc.target/i386/sse-23.c: Handle new tests. + +2017-11-10 Thomas Preud'homme + + * gcc.target/arm/cmse/bitfield-4.x: New file. + * gcc.target/arm/cmse/baseline/bitfield-4.c: Remove code and include + above file. + * gcc.target/arm/cmse/mainline/bitfield-4.c: Likewise. + * gcc.target/arm/cmse/bitfield-5.x: New file. + * gcc.target/arm/cmse/baseline/bitfield-5.c: Remove code and include + above file. + * gcc.target/arm/cmse/mainline/bitfield-5.c: Likewise. + * gcc.target/arm/cmse/bitfield-6.x: New file. + * gcc.target/arm/cmse/baseline/bitfield-6.c: Remove code and include + above file. + * gcc.target/arm/cmse/mainline/bitfield-6.c: Likewise. + * gcc.target/arm/cmse/bitfield-7.x: New file. + * gcc.target/arm/cmse/baseline/bitfield-7.c: Remove code and include + above file. + * gcc.target/arm/cmse/mainline/bitfield-7.c: Likewise. + * gcc.target/arm/cmse/bitfield-8.x: New file. + * gcc.target/arm/cmse/baseline/bitfield-8.c: Remove code and include + above file. + * gcc.target/arm/cmse/mainline/bitfield-8.c: Likewise. + * gcc.target/arm/cmse/bitfield-9.x: New file. + * gcc.target/arm/cmse/baseline/bitfield-9.c: Remove code and include + above file. + * gcc.target/arm/cmse/mainline/bitfield-9.c: Likewise. + * gcc.target/arm/cmse/bitfield-and-union.x: New file. + * gcc.target/arm/cmse/baseline/bitfield-and-union-1.c: Rename into ... + * gcc.target/arm/cmse/baseline/bitfield-and-union.c: This. Remove code + and include above bitfield-and-union.x file. + * gcc.target/arm/cmse/mainline/bitfield-and-union-1.c: Rename into ... + * gcc.target/arm/cmse/mainline/bitfield-and-union.c: this. Remove code + and include above bitfield-and-union.x file. + * gcc.target/arm/cmse/cmse-13.x: New file. + * gcc.target/arm/cmse/baseline/cmse-13.c: Remove code and include above + file. + * gcc.target/arm/cmse/mainline/hard-sp/cmse-13.c: Likewise. + * gcc.target/arm/cmse/mainline/hard/cmse-13.c: Likewise. + * gcc.target/arm/cmse/mainline/soft/cmse-13.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp/cmse-13.c: Likewise. + * gcc.target/arm/cmse/cmse-5.x: New file. + * gcc.target/arm/cmse/mainline/hard-sp/cmse-5.c: Remove code and + include above file. + * gcc.target/arm/cmse/mainline/hard/cmse-5.c: Likewise. + * gcc.target/arm/cmse/mainline/soft/cmse-5.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp-sp/cmse-5.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp/cmse-5.c: Likewise. + * gcc.target/arm/cmse/cmse-7.x: New file. + * gcc.target/arm/cmse/mainline/hard-sp/cmse-7.c: Remove code and + include above file. + * gcc.target/arm/cmse/mainline/hard/cmse-7.c: Likewise. + * gcc.target/arm/cmse/mainline/soft/cmse-7.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp-sp/cmse-7.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp/cmse-7.c: Likewise. + * gcc.target/arm/cmse/cmse-8.x: New file. + * gcc.target/arm/cmse/mainline/hard-sp/cmse-8.c: Remove code and + include above file. + * gcc.target/arm/cmse/mainline/hard/cmse-8.c: Likewise. + * gcc.target/arm/cmse/mainline/soft/cmse-8.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp-sp/cmse-8.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp/cmse-8.c: Likewise. + * gcc.target/arm/cmse/union-1.x: New file. + * gcc.target/arm/cmse/baseline/union-1.c: Remove code and include above + file. + * gcc.target/arm/cmse/mainline/union-1.c: Likewise. + * gcc.target/arm/cmse/union-2.x: New file. + * gcc.target/arm/cmse/baseline/union-2.c: Remove code and include above + file. + * gcc.target/arm/cmse/mainline/union-2.c: Likewise. + +2017-11-10 Martin Sebor + + PR c/81117 + * c-c++-common/Wsizeof-pointer-memaccess3.c: New test. + * c-c++-common/Wstringop-overflow.c: Same. + * c-c++-common/Wstringop-truncation.c: Same. + * c-c++-common/Wsizeof-pointer-memaccess2.c: Adjust. + * c-c++-common/attr-nonstring-2.c: New test. + * gcc/testsuite/gcc.dg/builtin-stpncpy.c: Adjust. + * g++.dg/torture/Wsizeof-pointer-memaccess1.C: Same. + * g++.dg/torture/Wsizeof-pointer-memaccess2.C: Same. + * gcc.dg/torture/pr63554.c: Same. + * gcc.dg/Walloca-1.c: Disable macro tracking. + +2017-11-10 Jakub Jelinek + + PR tree-optimization/82929 + * gcc.dg/pr82929.c: New test. + * g++.dg/opt/pr82929.C: New test. + +2017-11-10 Christophe Lyon + + * lib/target-supports.exp (check_effective_target_arm_soft_ok): + New function. + * gcc.target/arm/copysign_softfloat_1.c: Require arm_soft_ok + effective target. + +2017-11-10 Paul Thomas + + PR fortran/82934 + * gfortran.dg/allocate_assumed_charlen_1.f90: New test. + +2017-11-10 Jakub Jelinek + + PR bootstrap/82916 + * gcc.dg/store_merging_2.c: Only expect 2 successful mergings instead + of 3. + * gcc.dg/pr82916.c: New test. + +2017-11-10 Thomas Preud'homme + + * lib/scanasm.exp (scan-assembler): Extract filename from testname used + in summary. + (scan-assembler-not): Likewise. + (scan-hidden): Likewise. + (scan-not-hidden): Likewise. + (scan-stack-usage): Likewise. + (scan-stack-usage-not): Likewise. + (scan-assembler-times): Likewise. + (scan-assembler-dem): Likewise. + (scan-assembler-dem-not): Likewise. + (object-size): Likewise. + (scan-lto-assembler): Likewise. + * lib/scandump.exp (scan-dump): Likewise. + (scan-dump-times): Likewise. + (scan-dump-not): Likewise. + (scan-dump-dem): Likewise. + (scan-dump-dem-not): Likewise + +2017-11-10 Eric Botcazou + + * gnat.dg/opt69.adb: New test. + +2017-11-10 Jakub Jelinek + + PR rtl-optimization/82913 + * gcc.c-torture/compile/pr82913.c: New test. + +2017-11-09 Paul Thomas + + PR fortran/78619 + * gfortran.dg/pr78619.f90: New test. + +2017-11-09 Steven G. Kargl + + PR fortran/78814 + * gfortran.dg/interface_40.f90: New testcase. + +2017-11-09 Eric Botcazou + + * gnat.dg/controlled2.adb, gnat.dg/controlled4.adb, + gnat.dg/finalized.adb: Disable all warnings. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * lib/target-supports.exp (check_effective_target_vect_masked_store): + New proc. + * gcc.dg/vect/vect-cselim-1.c (foo): Mention that the second loop + is vectorizable with masked stores. Update scan-tree-dump-times + accordingly. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * lib/target-supports.exp + (check_effective_target_vect_align_stack_vars): New proc. + * gcc.dg/vect/vect-23.c: Only expect the array to be aligned if + vect_align_stack_vars. + * gcc.dg/vect/vect-24.c: Likewise. + * gcc.dg/vect/vect-25.c: Likewise. + * gcc.dg/vect/vect-26.c: Likewise. + * gcc.dg/vect/vect-32-big-array.c: Likewise. + * gcc.dg/vect/vect-32.c: Likewise. + * gcc.dg/vect/vect-40.c: Likewise. + * gcc.dg/vect/vect-42.c: Likewise. + * gcc.dg/vect/vect-46.c: Likewise. + * gcc.dg/vect/vect-48.c: Likewise. + * gcc.dg/vect/vect-52.c: Likewise. + * gcc.dg/vect/vect-54.c: Likewise. + * gcc.dg/vect/vect-62.c: Likewise. + * gcc.dg/vect/vect-67.c: Likewise. + * gcc.dg/vect/vect-75-big-array.c: Likewise. + * gcc.dg/vect/vect-75.c: Likewise. + * gcc.dg/vect/vect-77-alignchecks.c: Likewise. + * gcc.dg/vect/vect-78-alignchecks.c: Likewise. + * gcc.dg/vect/vect-89-big-array.c: Likewise. + * gcc.dg/vect/vect-89.c: Likewise. + * gcc.dg/vect/vect-96.c: Likewise. + * gcc.dg/vect/vect-multitypes-3.c: Likewise. + * gcc.dg/vect/vect-multitypes-6.c: Likewise. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * lib/target-supports.exp + (check_effective_target_vect_variable_length): New proc. + * gcc.dg/vect/pr60482.c: XFAIL test for no epilog loop if + vect_variable_length. + * gcc.dg/vect/slp-reduc-6.c: XFAIL two-operation SLP if + vect_variable_length. + * gcc.dg/vect/vect-alias-check-5.c: XFAIL alias optimization if + vect_variable_length. + * gfortran.dg/vect/fast-math-mgrid-resid.f: XFAIL predictive + commoning optimization if vect_variable_length. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * lib/target-supports.exp + (check_effective_target_vect_unaligned_possible): New proc. + * gcc.dg/vect/slp-25.c: Extend XFAIL of peeling for alignment from + vect_no_align && { ! vect_hw_misalign } to ! vect_unaligned_possible. + * gcc.dg/vect/vect-multitypes-1.c: Likewise. + * gcc.dg/vect/vect-109.c: XFAIL vectorisation of an unaligned + access to ! vect_unaligned_possible. + * gcc.dg/vect/vect-33.c: Likewise. + * gcc.dg/vect/vect-42.c: Likewise. + * gcc.dg/vect/vect-56.c: Likewise. + * gcc.dg/vect/vect-60.c: Likewise. + * gcc.dg/vect/vect-96.c: Likewise. + * gcc.dg/vect/vect-peel-1.c: Likewise. + * gcc.dg/vect/vect-27.c: Extend XFAIL of unaligned vectorization from + vect_no_align && { ! vect_hw_misalign } to ! vect_unaligned_possible. + * gcc.dg/vect/vect-29.c: Likewise. + * gcc.dg/vect/vect-44.c: Likewise. + * gcc.dg/vect/vect-48.c: Likewise. + * gcc.dg/vect/vect-50.c: Likewise. + * gcc.dg/vect/vect-52.c: Likewise. + * gcc.dg/vect/vect-72.c: Likewise. + * gcc.dg/vect/vect-75-big-array.c: Likewise. + * gcc.dg/vect/vect-75.c: Likewise. + * gcc.dg/vect/vect-77-alignchecks.c: Likewise. + * gcc.dg/vect/vect-77-global.c: Likewise. + * gcc.dg/vect/vect-78-alignchecks.c: Likewise. + * gcc.dg/vect/vect-78-global.c: Likewise. + * gcc.dg/vect/vect-multitypes-3.c: Likewise. + * gcc.dg/vect/vect-multitypes-4.c: Likewise. + * gcc.dg/vect/vect-multitypes-6.c: Likewise. + * gcc.dg/vect/vect-peel-4.c: Likewise. + * gcc.dg/vect/vect-peel-3.c: Likewise, and also for peeling + for alignment. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * lib/target-supports.exp + (check_effective_target_vect_element_align_preferred): New proc. + (check_effective_target_vect_peeling_profitable): Test it. + * gcc.dg/vect/no-section-anchors-vect-31.c: Don't expect peeling + if vect_element_align_preferred. + * gcc.dg/vect/no-section-anchors-vect-64.c: Likewise. + * gcc.dg/vect/pr65310.c: Likewise. + * gcc.dg/vect/vect-26.c: Likewise. + * gcc.dg/vect/vect-54.c: Likewise. + * gcc.dg/vect/vect-56.c: Likewise. + * gcc.dg/vect/vect-58.c: Likewise. + * gcc.dg/vect/vect-60.c: Likewise. + * gcc.dg/vect/vect-89-big-array.c: Likewise. + * gcc.dg/vect/vect-89.c: Likewise. + * gcc.dg/vect/vect-92.c: Likewise. + * gcc.dg/vect/vect-peel-1.c: Likewise. + * gcc.dg/vect/vect-outer-3a-big-array.c: Expect the step to + divide the alignment if vect_element_align_preferred. + * gcc.dg/vect/vect-outer-3a.c: Likewise. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * lib/target-supports.exp (vect_perm_supported): New proc. + (check_effective_target_vect_perm3_int): Likewise. + (check_effective_target_vect_perm3_short): Likewise. + (check_effective_target_vect_perm3_byte): Likewise. + * gcc.dg/vect/slp-perm-1.c: Expect SLP load permutation to + succeed if vect_perm3_int. + * gcc.dg/vect/slp-perm-5.c: Likewise. + * gcc.dg/vect/slp-perm-6.c: Likewise. + * gcc.dg/vect/slp-perm-7.c: Likewise. + * gcc.dg/vect/slp-perm-8.c: Likewise vect_perm3_byte. + * gcc.dg/vect/slp-perm-9.c: Likewise vect_perm3_short. + Use vect_perm_short instead of vect_perm. Add a scan-tree-dump-not + test for vect_perm3_short targets. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * gcc.dg/vect/no-vfa-vect-101.c: Use scan-tree-dump rather than + scan-tree-dump-times for vect_multiple_sizes. + * gcc.dg/vect/no-vfa-vect-102.c: Likewise. + * gcc.dg/vect/no-vfa-vect-102a.c: Likewise. + * gcc.dg/vect/no-vfa-vect-37.c: Likewise. + * gcc.dg/vect/no-vfa-vect-79.c: Likewise. + * gcc.dg/vect/vect-104.c: Likewise. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * lib/target-supports.exp (available_vector_sizes): New proc. + (check_effective_target_vect_multiple_sizes): Use it. + (check_effective_target_vect64): Likewise. + (check_effective_target_vect_sizes_32B_16B): Likewise. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * gcc.dg/vect/tree-vect.h (VECTOR_BITS): Define. + * gcc.dg/vect/bb-slp-pr69907.c: Include tree-vect.h. + (N): New macro. + (foo): Use it instead of hard-coded 320. + * gcc.dg/vect/no-scevccp-outer-7.c (N): Redefine if the default + value is too small for VECTOR_BITS. + * gcc.dg/vect/no-scevccp-vect-iv-3.c (N): Likewise. + * gcc.dg/vect/no-section-anchors-vect-31.c (N): Likewise. + * gcc.dg/vect/no-section-anchors-vect-36.c (N): Likewise. + * gcc.dg/vect/slp-perm-9.c (N): Likewise. + * gcc.dg/vect/vect-32.c (N): Likewise. + * gcc.dg/vect/vect-75.c (N, OFF): Likewise. + * gcc.dg/vect/vect-77-alignchecks.c (N, OFF): Likewise. + * gcc.dg/vect/vect-78-alignchecks.c (N, OFF): Likewise. + * gcc.dg/vect/vect-89.c (N): Likewise. + * gcc.dg/vect/vect-96.c (N): Likewise. + * gcc.dg/vect/vect-multitypes-3.c (N): Likewise. + * gcc.dg/vect/vect-multitypes-6.c (N): Likewise. + * gcc.dg/vect/vect-over-widen-1.c (N): Likewise. + * gcc.dg/vect/vect-over-widen-4.c (N): Likewise. + * gcc.dg/vect/vect-reduc-pattern-1a.c (N): Likewise. + * gcc.dg/vect/vect-reduc-pattern-1b.c (N): Likewise. + * gcc.dg/vect/vect-reduc-pattern-2a.c (N): Likewise. + * gcc.dg/vect/no-section-anchors-vect-64.c (NINTS): New macro. + (N): Redefine in terms of NINTS. + (ia, ib, ic): Use NINTS instead of hard-coded constants in the + array bounds. + * gcc.dg/vect/no-section-anchors-vect-69.c (NINTS): New macro. + (N): Redefine in terms of NINTS. + (test1): Replace a and b fields with NINTS - 2 ints of padding. + (main1): Use NINTS instead of hard-coded constants. + * gcc.dg/vect/section-anchors-vect-69.c (NINTS): New macro. + (N): Redefine in terms of NINTS. + (test1): Replace a and b fields with NINTS - 2 ints of padding. + (test2): Remove incorrect comments about alignment. + (main1): Use NINTS instead of hard-coded constants. + * gcc.dg/vect/pr45752.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (main): Continue to use canned results for the default value of N, + but compute the expected results from scratch for other values. + * gcc.dg/vect/slp-perm-1.c (N, main): As for pr45752.c. + * gcc.dg/vect/slp-perm-4.c (N, main): Likewise. + * gcc.dg/vect/slp-perm-5.c (N, main): Likewise. + * gcc.dg/vect/slp-perm-6.c (N, main): Likewise. + * gcc.dg/vect/slp-perm-7.c (N, main): Likewise. + * gcc.dg/vect/pr65518.c (NINTS, N, RESULT): New macros. + (giga): Use NINTS as the array bound. + (main): Use NINTS, N and RESULT. + * gcc.dg/vect/pr65947-5.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (main): Fill in any remaining elements of A programmatically. + * gcc.dg/vect/pr81136.c: Include tree-vect.h. + (a): Use VECTOR_BITS to set the alignment of the target structure. + * gcc.dg/vect/slp-19c.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (main1): Continue to use the canned input for the default value of N, + but compute the input from scratch for other values. + * gcc.dg/vect/slp-28.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (in1, in2, in3): Remove initialization. + (check1, check2): Delete. + (main1): Initialize in1, in2 and in3 here. Check every element + of the vectors and compute the expected values directly instead + of using an array. + * gcc.dg/vect/slp-perm-8.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (foo, main): Change type of "i" to int. + * gcc.dg/vect/vect-103.c (NINTS): New macro. + (N): Redefine in terms of N. + (c): Delete. + (main1): Use NINTS. Check the result from a and b directly. + * gcc.dg/vect/vect-67.c (NINTS): New macro. + (N): Redefine in terms of N. + (main1): Use NINTS for the inner array bounds. + * gcc.dg/vect/vect-70.c (NINTS, OUTERN): New macros. + (N): Redefine in terms of NINTS. + (s): Keep the outer dimensions as 4 even if N is larger than 24. + (tmp1): New variable. + (main1): Only define a local tmp1 if NINTS is relatively small. + Use OUTERN for the outer loops and NINTS for the inner loops. + * gcc.dg/vect/vect-91.c (OFF): New macro. + (a, main3): Use it. + * gcc.dg/vect/vect-92.c (NITER): New macro. + (main1, main2): Use it. + * gcc.dg/vect/vect-93.c (N): Rename to... + (N1): ...this. + (main): Update accordingly. + (N2): New macro. + (main1): Use N1 instead of 3001 and N2 insteaed of 10. + * gcc.dg/vect/vect-multitypes-1.c (NSHORTS, NINTS): New macros. + (N): Redefine in terms of NSHORTS. + (main1): Use NINTS - 1 instead of 3 and NSHORTS - 1 instead of 7. + (main): Likewise. + * gcc.dg/vect/vect-over-widen-3-big-array.c (N): Define to VECTOR_BITS. + (foo): Truncate the expected value to the type of *d. + * gcc.dg/vect/vect-peel-3.c (NINTS, EXTRA): New macros. + (ia, ib, ic, main): Use EXTRA. + (main): Use NINTS. + (RES_A, RES_B, REC_C): New macros. + (RES): Redefine as their sum. + * gcc.dg/vect/vect-reduc-or_1.c (N): New macro. + (in): Change number of elements to N. + (main): Update accordingly. Calculate the expected result. + * gcc.dg/vect/vect-reduc-or_2.c (N, in, main): As for + vect-reduc-or-1.c. + +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * gcc.dg/vect/bb-slp-cond-1.c (main): Add an asm volatile + to the set-up loop. + * gcc.dg/vect/slp-perm-7.c (main): Prevent vectorisation with + asm volatile ("" ::: "memory") instead of a conditional abort. + Update the expected vector loop count accordingly. + * gcc.dg/vect/slp-perm-9.c (main): Likewise. + * gcc.dg/vect/bb-slp-1.c (main1): Prevent vectorisation with + asm volatile ("" ::: "memory") instead of a conditional abort. + * gcc.dg/vect/slp-23.c (main): Likewise, + * gcc.dg/vect/slp-35.c (main): Likewise, + * gcc.dg/vect/slp-37.c (main): Likewise, + * gcc.dg/vect/slp-perm-4.c (main): Likewise. + * gcc.dg/vect/bb-slp-24.c (foo): Likewise. Remove dummy argument. + (main): Update call accordingly. + * gcc.dg/vect/bb-slp-25.c (foo, main): As for bb-slp-24.c. + * gcc.dg/vect/bb-slp-26.c (foo, main): Likewise. + * gcc.dg/vect/bb-slp-29.c (foo, main): Likewise. + * gcc.dg/vect/no-vfa-vect-102.c (foo): Delete. + (main): Don't initialize it. + (main1): Prevent vectorisation with asm volatile ("" ::: "memory") + instead of a conditional abort. + * gcc.dg/vect/no-vfa-vect-102a.c (foo, main1, main): As for + no-vfa-vect-102.c + * gcc.dg/vect/vect-103.c (foo, main1, main): Likewise. + * gcc.dg/vect/vect-104.c (foo, main1, main): Likewise. + * gcc.dg/vect/pr42709.c (main1): Remove dummy argument. + Prevent vectorisation with asm volatile ("" ::: "memory") + instead of a conditional abort. + * gcc.dg/vect/slp-13-big-array.c (y): Delete. + (main1): Prevent vectorisation with asm volatile ("" ::: "memory") + instead of a conditional abort. + * gcc.dg/vect/slp-3-big-array.c (y, main1): As for slp-13-big-array.c. + * gcc.dg/vect/slp-34-big-array.c (y, main1): Likewise. + * gcc.dg/vect/slp-4-big-array.c (y, main1): Likewise. + * gcc.dg/vect/slp-multitypes-11-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-105.c (y, main1): Likewise. + * gcc.dg/vect/vect-105-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-112-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-15-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-2-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-34-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-6-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-73-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-74-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-75-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-76-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-80-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-97-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-all-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-reduc-1char-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-reduc-2char-big-array.c (y, main1): Likewise. + * gcc.dg/vect/vect-strided-a-mult.c (y, main1): Likewise. + * gcc.dg/vect/vect-strided-a-u16-i2.c (y, main1): Likewise. + * gcc.dg/vect/vect-strided-a-u16-i4.c (y, main1): Likewise. + * gcc.dg/vect/vect-strided-a-u16-mult.c (y, main1): Likewise. + * gcc.dg/vect/vect-strided-a-u8-i2-gap.c (y, main1): Likewise. + * gcc.dg/vect/vect-strided-a-u8-i8-gap2-big-array.c (y, main1): + Likewise. + * gcc.dg/vect/vect-strided-a-u8-i8-gap2.c (y, main1): Likewise. + * gcc.dg/vect/vect-strided-a-u8-i8-gap7-big-array.c (y, main1): + Likewise. + * gcc.dg/vect/vect-strided-a-u8-i8-gap7.c (y, main1): Likewise. + * gcc.dg/vect/slp-24.c (y): Delete. + (main): Prevent vectorisation with asm volatile ("" ::: "memory") + instead of a conditional abort. + * gcc.dg/vect/slp-24-big-array.c (y, main): As for slp-24.c. + * gcc.dg/vect/vect-98-big-array.c (y, main): Likewise. + * gcc.dg/vect/vect-bswap16.c (y, main): Likewise. + * gcc.dg/vect/vect-bswap32.c (y, main): Likewise. + * gcc.dg/vect/vect-bswap64.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-mult-char-ls.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-mult.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-same-dr.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u16-i2.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u16-i4.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u32-i4.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u32-i8.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i2-gap.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i2.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap2-big-array.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap2.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap4-big-array.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap4-unknown.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap4.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap7-big-array.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i8-gap7.c (y, main): Likewise. + * gcc.dg/vect/vect-strided-u8-i8.c (y, main): Likewise. + * gcc.dg/vect/vect-10-big-array.c (y): Delete. + (foo): Prevent vectorisation with asm volatile ("" ::: "memory") + instead of a conditional abort. + * gcc.dg/vect/vect-double-reduc-6-big-array.c (y, foo): As for + vect-10-big-array.c. + * gcc.dg/vect/vect-reduc-pattern-1b-big-array.c (y, foo): Likewise. + * gcc.dg/vect/vect-reduc-pattern-1c-big-array.c (y, foo): Likewise. + * gcc.dg/vect/vect-reduc-pattern-2b-big-array.c (y, foo): Likewise. + * gcc.dg/vect/vect-117.c (foo): Delete. + (main): Don't initalize it. + +2017-11-09 Jan Hubicka + + * gcc.c-torture/compile/pr82879.c: New testcase. + +2017-11-09 Richard Biener + + PR tree-optimization/82902 + * g++.dg/torture/pr82902.C: New testcase. + +2017-11-09 Martin Liska + + PR target/82863 + * gcc.dg/pr82863.c: New test. + +2017-11-09 Hristian Kirtchev + + * gnat.dg/unreferenced.adb: New testcase. + +2017-11-09 Ed Schonberg + + * gnat.dg/out_param.adb: New testcase. + +2017-11-09 Hristian Kirtchev + + * gnat.dg/elab3.adb, gnat.dg/elab3.ads, gnat.dg/elab3_pkg.adb, + gnat.dg/elab3_pkg.ads: New testcase. + +2017-11-09 Pierre-Marie de Rodat + + * gnat.dg/controlled2.adb, gnat.dg/controlled4.adb, + gnat.dg/finalized.adb: Disable new warning. + +2017-11-09 Jakub Jelinek + + PR debug/82837 + * gcc.dg/debug/dwarf2/pr82837.c: New test. + +2017-11-08 Andi Kleen + + * gcc.target/i386/force-indirect-call-1.c: New test. + * gcc.target/i386/force-indirect-call-2.c: New test. + * gcc.target/i386/force-indirect-call-3.c: New test. + +2017-11-08 Steven G. Kargl + + PR Fortran/82841 + * gfortran.dg/transfer_simplify_11.f90: New test. + +2017-11-08 Steven G. Kargl + + PR fortran/82884 + * gfortran.dg/hollerith_character_array_constructor.f90: New test. + +2017-11-08 Kyrylo Tkachov + + * gcc.target/aarch64/store_v2vec_lanes.c: New test. + +2017-11-08 Kyrylo Tkachov + + * gcc.target/aarch64/load_v2vec_lanes_1.c: New test. + +2017-11-08 Kyrylo Tkachov + + * gcc.target/aarch64/construct_lane_zero_1.c: New test. + +2017-11-08 Ed Schonberg + + * gnat.dg/delta_aggr.adb: New testcase. + +2017-11-08 Jakub Jelinek + + * g++.dg/pr57878.C (__sso_string_base::_M_get_allocator): Return + a value. + + PR tree-optimization/78821 + * gcc.dg/store_merging_2.c: Expect 3 store mergings instead of 2. + * gcc.dg/store_merging_13.c (f7, f8, f9, f10, f11, f12, f13): New + functions. + (main): Test also those. Expect 13 store mergings instead of 6. + * gcc.dg/store_merging_14.c (f7, f8, f9): New functions. + (main): Test also those. Expect 9 store mergings instead of 6. + +2017-11-08 Wilco Dijkstra + + * gcc.target/aarch64/dwarf-cfa-reg.c: Update. + +2017-11-08 Javier Miranda + + * gnat.dg/overriding_ops2.adb, gnat.dg/overriding_ops2.ads, + gnat.dg/overriding_ops2_pkg.ads, gnat.dg/overriding_ops2_pkg-high.ads: + New testcase. + +2017-11-08 Andreas Schwab + + * c-c++-common/torture/aarch64-vect-lane-2.c (search_line_fast): + Change type to void. + +2017-11-08 Janne Blomqvist + + PR 82869 + * gfortran.dg/logical_temp_io.f90: New test. + * gfortran.dg/logical_temp_io_kind8.f90: New test. + +2017-11-08 Martin Liska + + * gcc.dg/tree-ssa/vrp101.c: Update expected pattern as + frequencies are not longer printed in dump output. + +2017-11-08 Eric Botcazou + + * gcc.dg/strlenopt-33g.c: Remove duplicate dg-do command. + +2017-11-08 Rainer Orth + + * g++.old-deja/g++.brendan/asm-extn1.C: Accept all sparc* targets. + (main): Add return type. + +2017-11-08 Martin Liska + + PR sanitizer/82792 + * g++.dg/asan/pr82792.C: New test. + +2017-11-07 Jakub Jelinek + + PR target/82855 + * gcc.target/i386/avx512dq-pr82855.c: New test. + +2017-11-07 Uros Bizjak + + PR target/80425 + * gcc.target/i386/pr80425-3.c: New test. + +2017-11-07 Andreas Schwab + + * g++.dg/pr50763-3.C (evalPoint): Return a value. + +2017-11-07 Wilco Dijkstra + Jackson Woodruff + + PR tree-optimization/71026 + * gcc.dg/div_neg: New test. + +2017-11-07 Sudakshina Das + + PR middle-end/80131 + * gcc.dg/pr80131-1.c: New Test. + +2017-11-07 Marc Glisse + + * gcc.dg/tree-ssa/bitops-1.c: New file. + +2017-11-07 Marc Glisse + + * gcc.dg/tree-ssa/negminus.c: New test. + +2017-11-06 Jeff Law + + * gcc.target/i386/stack-check-12.c: Revert to initial version. Then.. + Add -fomit-frame-pointer. + +2017-11-06 Carl Love + + * gcc.target/powerpc/builtins-revb-runnable.c: New runnable test file. + +2017-11-06 Michael Meissner + + PR target/82748 + * gcc.target/powerpc/pr82748-1.c: New test. + * gcc.target/powerpc/pr82748-2.c: Likewise. + +2017-11-06 Paolo Carlini + + PR c++/65579 + * g++.dg/cpp0x/constexpr-template11.C: New. + +2017-11-06 Jakub Jelinek + + PR tree-optimization/82838 + * gcc.c-torture/compile/pr82838.c: New test. + +2017-11-06 Jeff Law + + PR target/82788 + * gcc.dg/pr82788.c: New test. + +2017-11-06 Richard Sandiford + Alan Hayward + David Sherwood + + * gcc.c-torture/compile/pr82816.c: New test. + +2017-11-06 Bill Schmidt + + * gcc.target/powerpc/sad-vectorize-1.c: New file. + * gcc.target/powerpc/sad-vectorize-2.c: New file. + * gcc.target/powerpc/sad-vectorize-3.c: New file. + * gcc.target/powerpc/sad-vectorize-4.c: New file. + +2017-11-06 Martin Liska + + * c-c++-common/cilk-plus/AN/pr57541-2.c (foo1): Return a value + for functions with non-void return type, or change type to void, + or add -Wno-return-type for test. + (foo2): Likewise. + * c-c++-common/cilk-plus/AN/pr57541.c (foo): Likewise. + (foo1): Likewise. + * c-c++-common/cilk-plus/CK/errors.c: Likewise. + * c-c++-common/cilk-plus/CK/pr60197.c: Likewise. + * c-c++-common/cilk-plus/CK/spawn_in_return.c: Likewise. + * c-c++-common/fold-masked-cmp-1.c (test_pic): Likewise. + (test_exe): Likewise. + * c-c++-common/fold-masked-cmp-2.c (test_exe): Likewise. + * g++.dg/cilk-plus/AN/builtin_fn_mutating_tplt.cc (my_func): Likewise. + * g++.dg/cilk-plus/CK/pr68997.cc (fa2): Likewise. + * g++.dg/eh/sighandle.C (dosegv): Likewise. + * g++.dg/ext/vector14.C (foo): Likewise. + (main): Likewise. + * g++.dg/graphite/pr41305.C: Likewise. + * g++.dg/graphite/pr42930.C: Likewise. + * g++.dg/opt/pr46640.C (struct QBasicAtomicInt): Likewise. + (makeDir): Likewise. + * g++.dg/other/i386-8.C (foo): Likewise. + * g++.dg/pr45788.C: Likewise. + * g++.dg/pr64688.C (at_c): Likewise. + * g++.dg/pr65032.C (G::DecodeVorbis): Likewise. + * g++.dg/pr71633.C (c3::fn2): Likewise. + * g++.dg/stackprotectexplicit2.C (A): Likewise. + * g++.old-deja/g++.law/weak.C (main): Likewise. + +2017-11-06 Eric Botcazou + + * gnat.dg/gcov: New directory. + * gnat.dg/gcov/gcov.exp: New driver. + * gnat.dg/gcov/check.adb: New test. + +2017-11-06 Christophe Lyon + + * gcc.c-torture/execute/pr23135.c: Move dg-add-options after + dg-options. + * gcc.dg/torture/pr78305.c: Move dg-do as first directive. + * gcc.misc-tests/gcov-3.c: Likewise. + * gcc.target/arm/cmse/baseline/cmse-11.c: Move dg-options before dg-add-options. + * gcc.target/arm/cmse/baseline/cmse-13.c: Likewise. + * gcc.target/arm/cmse/baseline/cmse-2.c: Likewise. + * gcc.target/arm/cmse/baseline/cmse-6.c: Likewise. + * gcc.target/arm/cmse/baseline/softfp.c: Likewise. + * gcc.target/arm/cmse/mainline/hard-sp/cmse-13.c: Likewise. + * gcc.target/arm/cmse/mainline/hard-sp/cmse-5.c: Likewise. + * gcc.target/arm/cmse/mainline/hard-sp/cmse-7.c: Likewise. + * gcc.target/arm/cmse/mainline/hard-sp/cmse-8.c: Likewise. + * gcc.target/arm/cmse/mainline/hard/cmse-13.c: Likewise. + * gcc.target/arm/cmse/mainline/hard/cmse-5.c: Likewise. + * gcc.target/arm/cmse/mainline/hard/cmse-7.c: Likewise. + * gcc.target/arm/cmse/mainline/hard/cmse-8.c: Likewise. + * gcc.target/arm/cmse/mainline/soft/cmse-13.c: Likewise. + * gcc.target/arm/cmse/mainline/soft/cmse-5.c: Likewise. + * gcc.target/arm/cmse/mainline/soft/cmse-7.c: Likewise. + * gcc.target/arm/cmse/mainline/soft/cmse-8.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp-sp/cmse-5.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp-sp/cmse-7.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp-sp/cmse-8.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp/cmse-13.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp/cmse-5.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp/cmse-7.c: Likewise. + * gcc.target/arm/cmse/mainline/softfp/cmse-8.c: Likewise. + * gcc.target/arm/lp1189445.c: Likewise. + +2017-11-06 Mukesh Kapoor + + PR c++/80955 + * g++.dg/cpp0x/udlit-macros.C: New. + +2017-11-06 Paul Thomas + + PR fortran/69739 + * gfortran.dg/pr69739.f90: New test. + +2017-11-06 Martin Liska + + * c-c++-common/Wimplicit-fallthrough-8.c: Return a value for + functions with non-void return type, or change type to void, or + add -Wno-return-type for test. + * c-c++-common/asan/pr63638.c (f): Likewise. + * c-c++-common/goacc/parallel-1.c (firstprivate): Likewise. + * c-c++-common/gomp/sink-1.c (depend): Likewise. + * c-c++-common/missing-symbol.c: Likewise. + * c-c++-common/pr36513-2.c (main2): Likewise. + * c-c++-common/pr36513.c (main1): Likewise. + * c-c++-common/pr49706-2.c: Likewise. + * c-c++-common/pr65120.c: Likewise. + * c-c++-common/tm/volatile-1.c (f): Likewise. + * c-c++-common/vector-1.c (f): Likewise. + * c-c++-common/vector-2.c (f): Likewise. + * g++.dg/abi/abi-tag14.C (f): Likewise. + (g): Likewise. + * g++.dg/abi/abi-tag18.C (f): Likewise. + * g++.dg/abi/abi-tag18a.C (f): Likewise. + * g++.dg/abi/covariant2.C (struct c3): Likewise. + (struct c7): Likewise. + * g++.dg/abi/covariant3.C (c1::f6): Likewise. + * g++.dg/abi/mangle7.C (f1): Likewise. + * g++.dg/asan/pr81340.C (class e): Likewise. + (e::f): Likewise. + * g++.dg/concepts/fn8.C (struct S): Likewise. + * g++.dg/concepts/pr65575.C (f): Likewise. + * g++.dg/concepts/template-parm11.C (f): Likewise. + * g++.dg/conversion/op6.C: Likewise. + * g++.dg/cpp0x/Wunused-variable-1.C (foo): Likewise. + * g++.dg/cpp0x/access01.C: Likewise. + * g++.dg/cpp0x/alignas3.C (class alignas): Likewise. + * g++.dg/cpp0x/auto2.C (f): Likewise. + (struct A): Likewise. + (main): Likewise. + * g++.dg/cpp0x/constexpr-array17.C (struct D): Likewise. + * g++.dg/cpp0x/constexpr-defarg2.C (a): Likewise. + (B::foo): Likewise. + (B::bar): Likewise. + * g++.dg/cpp0x/constexpr-memfn1.C (struct Y): Likewise. + * g++.dg/cpp0x/dc1.C (struct D): Likewise. + * g++.dg/cpp0x/dc3.C (struct D): Likewise. + * g++.dg/cpp0x/decltype12.C: Likewise. + * g++.dg/cpp0x/decltype17.C (main): Likewise. + * g++.dg/cpp0x/decltype3.C: Likewise. + * g++.dg/cpp0x/decltype41.C (struct C): Likewise. + (struct D): Likewise. + * g++.dg/cpp0x/defaulted28.C (f): Likewise. + * g++.dg/cpp0x/enum_base3.C (struct D): Likewise. + * g++.dg/cpp0x/gen-attrs-4.C (five): Likewise. + * g++.dg/cpp0x/initlist96.C: Likewise. + * g++.dg/cpp0x/lambda/lambda-58566.C (struct A): Likewise. + * g++.dg/cpp0x/lambda/lambda-conv10.C: Likewise. + * g++.dg/cpp0x/lambda/lambda-conv12.C: Likewise. + * g++.dg/cpp0x/lambda/lambda-defarg3.C: Likewise. + * g++.dg/cpp0x/lambda/lambda-ice3.C (Klass::dostuff): Likewise. + * g++.dg/cpp0x/lambda/lambda-ice5.C (foo): Likewise. + * g++.dg/cpp0x/lambda/lambda-nested2.C (f1): Likewise. + * g++.dg/cpp0x/lambda/lambda-template12.C (class X): Likewise. + * g++.dg/cpp0x/lambda/lambda-template2.C (struct T): Likewise. + * g++.dg/cpp0x/lambda/lambda-this12.C (struct A): Likewise. + * g++.dg/cpp0x/nolinkage1.C (main): Likewise. + * g++.dg/cpp0x/nolinkage1a.cc (dummy): Likewise. + * g++.dg/cpp0x/nsdmi-template5.C: Likewise. + * g++.dg/cpp0x/parse1.C (B::B): Likewise. + * g++.dg/cpp0x/pr34054.C (foo): Likewise. + * g++.dg/cpp0x/pr47416.C: Likewise. + * g++.dg/cpp0x/pr58781.C: Likewise. + * g++.dg/cpp0x/pr70538.C: Likewise. + * g++.dg/cpp0x/pr81325.C: Likewise. + * g++.dg/cpp0x/range-for13.C (begin): Likewise. + (end): Likewise. + * g++.dg/cpp0x/range-for14.C (begin): Likewise. + (end): Likewise. + * g++.dg/cpp0x/rv2n.C (test2_18): Likewise. + (test2_28): Likewise. + (test2_38): Likewise. + (test2_58): Likewise. + (test2_68): Likewise. + (test2_78): Likewise. + * g++.dg/cpp0x/rv3n.C (test3_128): Likewise. + * g++.dg/cpp0x/static_assert10.C (foo): Likewise. + * g++.dg/cpp0x/static_assert11.C (struct A): Likewise. + * g++.dg/cpp0x/static_assert12.C: Likewise. + * g++.dg/cpp0x/static_assert13.C: Likewise. + * g++.dg/cpp0x/trailing1.C (struct A): Likewise. + * g++.dg/cpp0x/trailing5.C (foo): Likewise. + (bar): Likewise. + * g++.dg/cpp0x/variadic114.C: Likewise. + * g++.dg/cpp0x/variadic57.C (Dims...>::foo): Likewise. + (bar): Likewise. + * g++.dg/cpp0x/variadic65.C: Likewise. + * g++.dg/cpp0x/variadic66.C (bind): Likewise. + * g++.dg/cpp0x/variadic97.C: Likewise. + * g++.dg/cpp0x/variadic98.C (__attribute__): Likewise. + * g++.dg/cpp1y/auto-fn11.C: Likewise. + * g++.dg/cpp1y/auto-fn29.C: Likewise. + * g++.dg/cpp1y/auto-fn38.C: Likewise. + * g++.dg/cpp1y/constexpr-return2.C: Likewise. + * g++.dg/cpp1y/lambda-init7.C (foo): Likewise. + * g++.dg/cpp1y/pr63996.C: Likewise. + * g++.dg/cpp1y/pr65202.C: Likewise. + * g++.dg/cpp1y/pr66443-cxx14.C (Ok): Likewise. + * g++.dg/cpp1y/pr79253.C (struct D): Likewise. + * g++.dg/cpp1y/static_assert1.C: Likewise. + * g++.dg/cpp1y/static_assert2.C: Likewise. + * g++.dg/cpp1y/var-templ44.C: Likewise. + * g++.dg/cpp1z/fold6.C (f): Likewise. + * g++.dg/cpp1z/inline-var2.C (foo): Likewise. + * g++.dg/cpp1z/lambda-this1.C (struct B): Likewise. + * g++.dg/cpp1z/static_assert-nomsg.C: Likewise. + * g++.dg/debug/dwarf-eh-personality-1.C (foobar): Likewise. + * g++.dg/debug/dwarf2/dwarf4-typedef.C (struct B): Likewise. + * g++.dg/debug/dwarf2/icf.C: Likewise. + * g++.dg/debug/dwarf2/pr61433.C (main): Likewise. + * g++.dg/debug/nullptr01.C (g): Likewise. + * g++.dg/debug/pr16792.C (foo): Likewise. + * g++.dg/debug/pr46241.C (class btCollisionWorld): Likewise. + * g++.dg/debug/pr46338.C (struct S): Likewise. + * g++.dg/debug/pr47106.C (baz): Likewise. + (bar): Likewise. + (foo): Likewise. + * g++.dg/debug/pr71057.C (fn1): Likewise. + * g++.dg/debug/pr71432.C (class CLIParameterType): Likewise. + (CLIParameterType::checkSwitched): Likewise. + * g++.dg/debug/pr80461.C (struct B): Likewise. + * g++.dg/dfp/44473-1.C (bar): Likewise. + * g++.dg/dfp/44473-2.C (bar): Likewise. + (foo): Likewise. + * g++.dg/eh/builtin1.C: Likewise. + * g++.dg/eh/builtin2.C: Likewise. + * g++.dg/eh/builtin3.C: Likewise. + * g++.dg/eh/pr45569.C (j): Likewise. + * g++.dg/eh/unwind2.C: Likewise. + * g++.dg/expr/bitfield11.C: Likewise. + * g++.dg/expr/static_cast7.C (f): Likewise. + * g++.dg/ext/altivec-14.C: Likewise. + * g++.dg/ext/asm13.C (fn1): Likewise. + * g++.dg/ext/builtin-object-size3.C: Likewise. + * g++.dg/ext/has_nothrow_assign_odr.C (main): Likewise. + (S::operator=): Likewise. + * g++.dg/ext/label7.C (f): Likewise. + * g++.dg/ext/label8.C (f): Likewise. + * g++.dg/ext/tmplattr7.C (test): Likewise. + * g++.dg/ext/vector8.C (f): Likewise. + * g++.dg/ext/visibility/anon1.C: Likewise. + * g++.dg/ext/visibility/anon2.C (f): Likewise. + * g++.dg/ext/visibility/namespace1.C (__attribute): Likewise. + * g++.dg/ext/vla16.C (fn1): Likewise. + * g++.dg/goacc/reference.C: Likewise. + * g++.dg/gomp/pr37189.C: Likewise. + * g++.dg/gomp/pr39495-1.C: Likewise. + * g++.dg/gomp/pr39495-2.C: Likewise. + * g++.dg/gomp/pr82054.C: Likewise. + * g++.dg/inherit/covariant10.C (struct c6): Likewise. + (struct c17): Likewise. + * g++.dg/inherit/covariant11.C (struct c1): Likewise. + (struct c3): Likewise. + (struct c11): Likewise. + (struct c15): Likewise. + * g++.dg/inherit/protected1.C (A::operator==): Likewise. + * g++.dg/init/inline1.C (struct A): Likewise. + * g++.dg/init/new18.C: Likewise. + * g++.dg/init/reference2.C (f): Likewise. + * g++.dg/init/reference3.C: Likewise. + * g++.dg/init/switch1.C (f): Likewise. + * g++.dg/ipa/devirt-10.C (struct wxDCBase): Likewise. + * g++.dg/ipa/devirt-13.C (main): Likewise. + * g++.dg/ipa/devirt-14.C (main): Likewise. + * g++.dg/ipa/devirt-15.C (main): Likewise. + * g++.dg/ipa/devirt-16.C (main): Likewise. + * g++.dg/ipa/devirt-17.C (main): Likewise. + * g++.dg/ipa/devirt-18.C (main): Likewise. + * g++.dg/ipa/devirt-19.C: Likewise. + * g++.dg/ipa/devirt-21.C (main): Likewise. + * g++.dg/ipa/devirt-23.C (main): Likewise. + * g++.dg/ipa/devirt-38.C: Likewise. + * g++.dg/ipa/devirt-40.C (A::m_fn1): Likewise. + * g++.dg/ipa/devirt-41.C (main): Likewise. + * g++.dg/ipa/devirt-42.C (main): Likewise. + * g++.dg/ipa/devirt-44.C (struct A): Likewise. + (main): Likewise. + * g++.dg/ipa/devirt-45.C (struct A): Likewise. + (main): Likewise. + * g++.dg/ipa/devirt-48.C (struct B): Likewise. + (struct D): Likewise. + * g++.dg/ipa/devirt-52.C: Likewise. + * g++.dg/ipa/nothrow-1.C (main): Likewise. + * g++.dg/ipa/pr43812.C (LocalSurface::bbox): Likewise. + * g++.dg/ipa/pr44372.C: Likewise. + * g++.dg/ipa/pr45572-1.C (fgetc_unlocked): Likewise. + (putc_unlocked): Likewise. + (getline): Likewise. + (ferror_unlocked): Likewise. + * g++.dg/ipa/pr58371.C: Likewise. + * g++.dg/ipa/pr59176.C: Likewise. + * g++.dg/ipa/pr60640-1.C (class G): Likewise. + * g++.dg/ipa/pr61540.C (struct top): Likewise. + * g++.dg/ipa/pr63470.C (class FTjackSupport): Likewise. + * g++.dg/ipa/pr63587-1.C: Likewise. + * g++.dg/ipa/pr63587-2.C: Likewise. + * g++.dg/ipa/pr63838.C (__attribute__): Likewise. + * g++.dg/ipa/pr63894.C (J::m_fn3): Likewise. + * g++.dg/ipa/pr64068.C (class A): Likewise. + (A::m_fn2): Likewise. + (class C): Likewise. + * g++.dg/ipa/pr64896.C (struct D): Likewise. + * g++.dg/ipa/pr65002.C: Likewise. + * g++.dg/ipa/pr65008.C (__attribute__): Likewise. + * g++.dg/ipa/pr65465.C (struct D): Likewise. + * g++.dg/ipa/pr66896.C (struct A): Likewise. + * g++.dg/ipa/pr68851.C (class G): Likewise. + (C::checkPseudoClass): Likewise. + * g++.dg/ipa/pr78211.C: Likewise. + * g++.dg/ipa/pr79931.C (AttrImpl::insertBefore): Likewise. + * g++.dg/ipa/pure-const-1.C (main): Likewise. + * g++.dg/ipa/pure-const-2.C (main): Likewise. + * g++.dg/ipa/pure-const-3.C (main): Likewise. + * g++.dg/ipa/remref-1.C (main): Likewise. + * g++.dg/ipa/remref-2.C (main): Likewise. + * g++.dg/lookup/builtin2.C (f): Likewise. + * g++.dg/lookup/crash3.C (struct A): Likewise. + (struct B): Likewise. + (crash): Likewise. + * g++.dg/lookup/friend20.C: Likewise. + * g++.dg/lookup/pr80891-5.C (vf2_subgraph_iso): Likewise. + * g++.dg/lookup/struct2.C (A::c): Likewise. + * g++.dg/lto/20080709_0.C (f): Likewise. + * g++.dg/lto/20080907_0.C: Likewise. + * g++.dg/lto/20080915_0.C (struct Baz): Likewise. + * g++.dg/lto/20080916_0.C (g): Likewise. + * g++.dg/lto/20081022_0.C (main): Likewise. + * g++.dg/lto/20081023_0.C (main): Likewise. + * g++.dg/lto/20081118_0.C (foo::method): Likewise. + * g++.dg/lto/20081118_1.C (bar::method): Likewise. + * g++.dg/lto/20081120-1_0.C: Likewise. + * g++.dg/lto/20081120-1_1.C: Likewise. + * g++.dg/lto/20081127_1.C (main): Likewise. + * g++.dg/lto/20081217-2_0.C (struct A): Likewise. + * g++.dg/lto/20090303_0.C: Likewise. + * g++.dg/lto/20090311-1_0.C: Likewise. + * g++.dg/lto/20090312_0.C: Likewise. + * g++.dg/lto/20090315_0.C (main): Likewise. + * g++.dg/lto/20091002-1_0.C: Likewise. + * g++.dg/lto/20091002-2_0.C (class DataArray): Likewise. + * g++.dg/lto/20091002-3_0.C (class DataArray): Likewise. + * g++.dg/lto/20091004-1_0.C: Likewise. + * g++.dg/lto/20091004-2_0.C: Likewise. + * g++.dg/lto/20091004-3_1.C (All_Torus_Intersections): Likewise. + * g++.dg/lto/20100721-1_0.C (__gthread_active_p): Likewise. + * g++.dg/lto/20101010-1_0.C: Likewise. + * g++.dg/lto/20101010-2_0.C: Likewise. + * g++.dg/lto/pr45679-1_0.C: Likewise. + * g++.dg/lto/pr45679-1_1.C: Likewise. + * g++.dg/lto/pr45679-2_0.C: Likewise. + * g++.dg/lto/pr48042_0.C (B::x): Likewise. + * g++.dg/lto/pr51650-1_0.C (fn): Likewise. + (main): Likewise. + * g++.dg/lto/pr51650-3_0.C (fn): Likewise. + (main): Likewise. + * g++.dg/lto/pr63270_1.C: Likewise. + * g++.dg/lto/pr65193_0.C: Likewise. + * g++.dg/lto/pr65302_0.C: Likewise. + * g++.dg/lto/pr65316_0.C: Likewise. + * g++.dg/lto/pr65475c_0.C: Likewise. + * g++.dg/lto/pr65549_0.C (main): Likewise. + * g++.dg/lto/pr69077_0.C (cWeightedStdDev::netPack): Likewise. + * g++.dg/lto/pr69589_0.C: Likewise. + * g++.dg/opt/combine.C (qvariant_cast): Likewise. + (QScriptDebuggerBackendPrivate::trace): Likewise. + * g++.dg/opt/complex3.C (j): Likewise. + * g++.dg/opt/covariant1.C (struct T): Likewise. + * g++.dg/opt/declone3.C (Item::m_fn1): Likewise. + * g++.dg/opt/dump1.C (__attribute__): Likewise. + * g++.dg/opt/inline15.C (struct C): Likewise. + (fn2): Likewise. + * g++.dg/opt/local1.C (h): Likewise. + * g++.dg/opt/memcpy1.C (csBoxClipper::Clip): Likewise. + * g++.dg/opt/new1.C: Likewise. + * g++.dg/opt/nrv8.C (main): Likewise. + * g++.dg/opt/pr23299.C (struct A): Likewise. + (struct B): Likewise. + (struct C): Likewise. + * g++.dg/opt/pr27826.C (struct Geometry): Likewise. + * g++.dg/opt/pr44919.C (back_inserter): Likewise. + * g++.dg/opt/pr47615.C (main): Likewise. + * g++.dg/opt/pr55329.C (struct A): Likewise. + * g++.dg/opt/pr61456.C (Set): Likewise. + * g++.dg/opt/pr65003.C (D::foo): Likewise. + (F::foo): Likewise. + * g++.dg/opt/pr65554.C: Likewise. + * g++.dg/opt/pr69432.C (struct C): Likewise. + * g++.dg/opt/pr78373.C (struct D): Likewise. + (Traits>::m_fn4): Likewise. + * g++.dg/opt/pr79267.C (struct F): Likewise. + * g++.dg/opt/pr82159-2.C: Likewise. + * g++.dg/other/array3.C (reserve): Likewise. + * g++.dg/other/crash-5.C (f): Likewise. + * g++.dg/other/crash-8.C: Likewise. + * g++.dg/other/error34.C (S): Likewise. + * g++.dg/other/pr22003.C (c3::func): Likewise. + * g++.dg/other/pr24623.C (RefCountPointer): Likewise. + * g++.dg/other/pr29610.C (struct __normal_iterator): Likewise. + (Painter::for_each): Likewise. + (Painter::redraw_window): Likewise. + * g++.dg/other/pr42645-1.C (struct S): Likewise. + * g++.dg/other/pr42645-2.C (foo): Likewise. + (f3): Likewise. + * g++.dg/other/pr52048.C: Likewise. + * g++.dg/other/typedef3.C (XalanCProcessor::getParseOption): Likewise. + * g++.dg/overload/defarg4.C (class foo): Likewise. + (bar::Initialize): Likewise. + * g++.dg/overload/operator5.C (equalIgnoringCase): Likewise. + * g++.dg/overload/ref-conv1.C: Likewise. + * g++.dg/overload/template5.C (test): Likewise. + * g++.dg/parse/crash40.C (class AAA): Likewise. + * g++.dg/parse/crash61.C: Likewise. + * g++.dg/parse/crash67.C: Likewise. + * g++.dg/parse/ctor5.C: Likewise. + * g++.dg/parse/defarg4.C (Foo): Likewise. + * g++.dg/parse/defarg6.C: Likewise. + * g++.dg/parse/error5.C (class Foo): Likewise. + * g++.dg/parse/expr2.C (foo): Likewise. + * g++.dg/parse/friend7.C: Likewise. + * g++.dg/parse/namespace1.C (bar): Likewise. + * g++.dg/parse/namespace9.C (g): Likewise. + * g++.dg/parse/ret-type2.C: Likewise. + * g++.dg/parse/typedef8.C (foo): Likewise. + * g++.dg/pch/static-1.C (LocalStaticTest): Likewise. + (main): Likewise. + * g++.dg/plugin/diagnostic-test-expressions-1.C (test_structure_references): Likewise. + (test_postfix_incdec): Likewise. + (test_sizeof): Likewise. + (test_alignof): Likewise. + (test_prefix_incdec): Likewise. + * g++.dg/plugin/dumb-plugin-test-1.C (func): Likewise. + * g++.dg/plugin/self-assign-test-1.C (func): Likewise. + * g++.dg/plugin/self-assign-test-2.C (func): Likewise. + * g++.dg/plugin/self-assign-test-3.C (func): Likewise. + * g++.dg/pr55513.C (main): Likewise. + * g++.dg/pr55604.C (main): Likewise. + * g++.dg/pr57662.C: Likewise. + * g++.dg/pr58389.C (F::m_fn1): Likewise. + * g++.dg/pr59510.C: Likewise. + * g++.dg/pr67989.C: Likewise. + * g++.dg/pr70590-2.C: Likewise. + * g++.dg/pr70590.C: Likewise. + * g++.dg/pr70965.C (foo): Likewise. + * g++.dg/pr77550.C: Likewise. + * g++.dg/pr80287.C (struct A): Likewise. + * g++.dg/pr80707.C (A::m_fn1): Likewise. + * g++.dg/pr81194.C: Likewise. + * g++.dg/spellcheck-identifiers.C: Likewise. + * g++.dg/tc1/dr152.C: Likewise. + * g++.dg/template/aggr-init1.C (CreateA): Likewise. + * g++.dg/template/anon1.C (struct x): Likewise. + (struct vector): Likewise. + * g++.dg/template/array29.C: Likewise. + * g++.dg/template/array7.C (bar): Likewise. + * g++.dg/template/canon-type-8.C: Likewise. + * g++.dg/template/conv1.C (First::Foo): Likewise. + * g++.dg/template/crash107.C: Likewise. + * g++.dg/template/crash23.C (f): Likewise. + * g++.dg/template/crash8.C (struct bar): Likewise. + * g++.dg/template/defarg4.C (struct A): Likewise. + * g++.dg/template/dependent-expr9.C: Likewise. + * g++.dg/template/error10.C (Btest): Likewise. + * g++.dg/template/friend32.C (f): Likewise. + * g++.dg/template/init6.C (Graph::Inner::get): Likewise. + (main): Likewise. + * g++.dg/template/memfriend7.C (A::h): Likewise. + * g++.dg/template/new10.C (Analyzer::ReadDictionary): Likewise. + * g++.dg/template/nontype12.C (baz): Likewise. + * g++.dg/template/overload12.C (foo2): Likewise. + * g++.dg/template/overload5.C (foo::f): Likewise. + * g++.dg/template/overload8.C (struct A): Likewise. + * g++.dg/template/partial10.C (fn): Likewise. + (main): Likewise. + * g++.dg/template/partial9.C (f): Likewise. + * g++.dg/template/qual1.C (shift_compare): Likewise. + * g++.dg/template/show-template-tree-3.C: Likewise. + * g++.dg/template/sizeof8.C (S + + * c-c++-common/dfp/call-by-value.c (foo32): Return a default + value of change return type to void. + (foo64): Likewise. + (foo128): Likewise. + * g++.dg/bprob/g++-bprob-1.C: Likewise. + * g++.dg/cpp0x/lambda/lambda-template.C (f): Likewise. + * g++.dg/cpp0x/range-for6.C (foo): Likewise. + * g++.dg/cpp0x/udlit-template.C: Likewise. + * g++.dg/cpp1z/eval-order3.C (struct A): Likewise. + (operator>>): Likewise. + * g++.dg/expr/cond12.C (struct X): Likewise. + (X::operator=): Likewise. + * g++.dg/gcov/gcov-1.C: Likewise. + * g++.dg/gcov/gcov-threads-1.C (ContentionNoDeadlock_thread): Likewise. + * g++.dg/ipa/devirt-21.C: Likewise. + * g++.dg/ipa/devirt-23.C: Likewise. + * g++.dg/ipa/devirt-34.C (t): Likewise. + * g++.dg/missing-return.C: New test. Likewise. + * g++.dg/opt/20050511-1.C (bar): Likewise. + * g++.dg/opt/const3.C (A::foo1): Likewise. + (A::foo2): Likewise. + * g++.dg/opt/pr23299.C (E::c): Likewise. + * g++.dg/other/copy2.C (A::operator=): Likewise. + * g++.dg/overload/addr1.C: Likewise. + * g++.dg/pr48484.C: Likewise. + * g++.dg/tls/thread_local3.C (thread_main): Likewise. + * g++.dg/tls/thread_local3g.C (thread_main): Likewise. + * g++.dg/tls/thread_local5.C (thread_main): Likewise. + * g++.dg/tls/thread_local5g.C (thread_main): Likewise. + * g++.dg/tls/thread_local6.C (thread_main): Likewise. + * g++.dg/tls/thread_local6g.C (thread_main): Likewise. + * g++.dg/torture/pr34850.C (OctetString::operator^=): Likewise. + * g++.dg/tree-prof/pr79259.C (fn2): Likewise. + * g++.dg/tree-ssa/pr33604.C (struct Value): Likewise. + * g++.dg/tree-ssa/pr81408.C (struct p): Likewise. + (av): Likewise. + * g++.dg/warn/string1.C (test): Likewise. + +2017-11-05 Thomas Koenig + + PR fortran/82471 + * gfortran.dg/loop_interchange_1.f90: New test. + +2017-11-05 Paul Thomas + + PR fortran/78641 + * gfortran.dg/class_66.f90: New test. + +2017-11-05 Paul Thomas + + PR fortran/81447 + * gfortran.dg/class_65.f90: New test. + * gfortran.dg/alloc_comp_basics_1.f90: Increase builtin_free + count from 18 to 21. + * gfortran.dg/allocatable_scalar_9.f90: Increase builtin_free + count from 32 to 54. + * gfortran.dg/auto_dealloc_1.f90: Increase builtin_free + count from 4 to 10. + * gfortran.dg/coarray_lib_realloc_1.f90: Increase builtin_free + count from 3 to 6. Likewise _gfortran_caf_deregister from 2 to + 3, builtin_malloc from 1 to 4 and builtin_memcpy|= MEM from + 2 to 5. + * gfortran.dg/finalize_28.f90: Increase builtin_free + count from 3 to 6. + * gfortran.dg/move_alloc_15.f90: Increase builtin_free and + builtin_malloc counts from 11 to 14. + * gfortran.dg/typebound_proc_27.f03: Increase builtin_free + count from 7 to 10. Likewise builtin_malloc from 12 to 15. + +2017-11-04 Daniel Santos + + gcc.target/i386/pr82002-2a.c: Change from xfail to fail. + gcc.target/i386/pr82002-2b.c: Likewise. + +2017-11-04 Andre Vehreschild + + * gfortran.dg/coarray/send_char_array_1.f90: New test. + +2017-11-04 Thomas Koenig + + PR fortran/70330 + * gfortran.dg/pr70330.f90: New test. + +2017-11-04 Thomas Koenig + + PR fortran/29600 + * gfortran.dg/minmaxloc_8.f90: New test. + +2017-11-04 Paul Thomas + + PR fortran/81735 + * gfortran.dg/pr81735.f90: New test. + +2017-11-03 Steven G. Kargl + + PR fortran/82796 + * gfortran.dg/equiv_pure.f90: New test. + +2017-11-03 Jeff Law + + PR target/82823 + * g++.dg/torture/pr82823.C: New test. + + * gcc.target/i386/stack-check-12.c: New test. + +2017-11-03 Jakub Jelinek + + PR tree-optimization/78821 + * gcc.dg/store_merging_13.c: New test. + * gcc.dg/store_merging_14.c: New test. + +2017-11-03 Steven G. Kargl + + * gfortran.dg/large_real_kind_2.F90: Test passes on FreeBSD. Remove + dg-xfail-if directive. + +2017-11-03 Sandra Loosemore + + * gcc.target/mips/msa.c: Add -fcommon to dg-options. + +2017-11-03 Uros Bizjak + + PR testsuite/82828 + PR rtl-optimization/70263 + * gcc.target/i386/pr70263-2.c: Fix invalid testcase. + +2017-11-03 Marc Glisse + + * gcc.dg/tree-ssa/negneg-1.c: New file. + * gcc.dg/tree-ssa/negneg-2.c: Likewise. + * gcc.dg/tree-ssa/negneg-3.c: Likewise. + * gcc.dg/tree-ssa/negneg-4.c: Likewise. + +2017-11-03 Jan Hubicka + + * gcc.dg/no-strict-overflow-3.c (foo): Update magic + value to not clash with frequency. + * gcc.dg/strict-overflow-3.c (foo): Likewise. + * gcc.dg/tree-ssa/builtin-sprintf-2.c: Update template. + * gcc.dg/tree-ssa/dump-2.c: Update template. + * gcc.dg/tree-ssa/ifc-10.c: Update template. + * gcc.dg/tree-ssa/ifc-11.c: Update template. + * gcc.dg/tree-ssa/ifc-12.c: Update template. + * gcc.dg/tree-ssa/ifc-20040816-1.c: Update template. + * gcc.dg/tree-ssa/ifc-20040816-2.c: Update template. + * gcc.dg/tree-ssa/ifc-5.c: Update template. + * gcc.dg/tree-ssa/ifc-8.c: Update template. + * gcc.dg/tree-ssa/ifc-9.c: Update template. + * gcc.dg/tree-ssa/ifc-cd.c: Update template. + * gcc.dg/tree-ssa/ifc-pr56541.c: Update template. + * gcc.dg/tree-ssa/ifc-pr68583.c: Update template. + * gcc.dg/tree-ssa/ifc-pr69489-1.c: Update template. + * gcc.dg/tree-ssa/ifc-pr69489-2.c: Update template. + * gcc.target/i386/pr61403.c: Update template. + +2017-11-03 Nathan Sidwell + + * lib/scanlang.exp: Fix error message to refer to scan-lang-dump. + + PR c++/82710 + * g++.dg/warn/pr82710.C: More cases. + +2017-11-03 Richard Sandiford + + * gcc.dg/pr82809.c: New test. + +2017-11-02 Paolo Carlini + + PR c++/81957 + * g++.dg/cpp0x/variadic-crash5.C: New. + +2017-11-02 Steve Ellcey + + PR target/79868 + * gcc.target/aarch64/spellcheck_1.c: Update dg-error string to match + new format. + * gcc.target/aarch64/spellcheck_2.c: Ditto. + * gcc.target/aarch64/spellcheck_3.c: Ditto. + * gcc.target/aarch64/target_attr_11.c: Ditto. + * gcc.target/aarch64/target_attr_12.c: Ditto. + * gcc.target/aarch64/target_attr_17.c: Ditto. + +2017-11-02 Nathan Sidwell + + PR c++/82710 + * g++.dg/warn/pr82710.C: New. + + * g++.dg/lang-dump.C: New. + +2017-11-02 Richard Biener + + PR tree-optimization/82795 + * gcc.target/i386/pr82795.c: New testcase. + +2017-11-02 Claudiu Zissulescu + + * gcc.target/arc/loop-1.c: Add test. + +2017-11-02 Tom de Vries + + PR testsuite/82415 + * gcc.target/i386/naked-1.c: Make scan patterns more precise. + * gcc.target/i386/naked-2.c: Same. + +2017-11-02 Richard Biener + + PR middle-end/82765 + * gcc.dg/pr82765.c: New testcase. + +2017-11-02 Tom de Vries + + * gfortran.dg/implied_do_io_1.f90: Fix scan-tree-dump-times pattern. + +2017-11-01 Jakub Jelinek + + PR rtl-optimization/82778 + * g++.dg/opt/pr82778.C: New test. + +2017-11-01 Michael Collison + + PR rtl-optimization/82597 + * gcc.dg/pr82597.c: New test. + +2017-11-01 Uros Bizjak + + * gcc.target/alpha/sqrt.c: New test. + +2017-10-31 Daniel Santos + + * gcc.target/i386/pr82002-1.c: New test. + * gcc.target/i386/pr82002-2a.c: New xfail test. + * gcc.target/i386/pr82002-2b.c: New xfail test. + +2017-10-31 Martin Jambor + + PR c++/81702 + * g++.dg/tree-ssa/pr81702.C: New test. + +2017-10-31 David Malcolm + + * jit.dg/jit.exp (jit-dg-test): If PRESERVE_EXECUTABLES is set in + the environment, don't delete the generated executable. + +2017-10-31 David Malcolm + + * g++.dg/cpp0x/auto21.C: Update dg-error to reflect addition of quotes. + * g++.dg/cpp0x/missing-initializer_list-include.C: Likewise. + +2017-10-31 David Malcolm + + * gcc.dg/plugin/diagnostic_plugin_show_trees.c (show_tree): Update + for renaming of error_at_rich_loc and inform_at_rich_loc. + * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c + (test_show_locus): Likewise for renaming of warning_at_rich_loc. + +2017-10-31 Martin Liska + + * g++.dg/gcov/loop.C: New test. + * lib/gcov.exp: Support human readable format for counts. + +2017-10-31 Martin Liska + + * g++.dg/gcov/ternary.C: New test. + * g++.dg/gcov/gcov-threads-1.C (main): Update expected line count. + * lib/gcov.exp: Support new format for intermediate file format. + +2017-11-01 Julia Koval + + * gcc.target/i386/avx-1.c: Handle new intrinsics. + * gcc.target/i386/avx512-check.h: Check GFNI bit. + * gcc.target/i386/avx512f-gf2p8affineinvqb-2.c: Runtime test. + * gcc.target/i386/avx512vl-gf2p8affineinvqb-2.c: Runtime test. + * gcc.target/i386/gfni-1.c: New. + * gcc.target/i386/gfni-2.c: New. + * gcc.target/i386/gfni-3.c: New. + * gcc.target/i386/gfni-4.c: New. + * gcc.target/i386/i386.exp: (check_effective_target_gfni): New. + * gcc.target/i386/sse-12.c: Handle new intrinsics. + * gcc.target/i386/sse-13.c: Ditto. + * gcc.target/i386/sse-14.c: Ditto. + * gcc.target/i386/sse-22.c: Ditto. + * gcc.target/i386/sse-23.c: Ditto. + * g++.dg/other/i386-2.C: Ditto. + * g++.dg/other/i386-3.C: Ditto. + +2017-11-01 Michael Collison + + PR rtl-optimization/82597 + * gcc.dg/pr82597.c: New test. + +2017-10-30 Paolo Carlini + + PR c++/67595 + * g++.dg/concepts/pr67595.C: New. + +2017-10-30 Paul Thomas + + PR fortran/80850 + * gfortran.dg/class_64_f90 : New test. + +2017-10-30 Uros Bizjak + + * g++.dg/pr82725.C: Move to ... + * g++.dg/cpp0x/pr82725.C: ... here. Add c++11 target directive. + +2017-10-30 Steven G. Kargl + + * gfortran.dg/dtio_13.f90: Remove TODO comment and dg-error test. + +2017-10-30 Paolo Carlini + + PR c++/82085 + * g++.dg/cpp1y/var-templ56.C: New. + +2017-10-30 Nathan Sidwell + + * g++.dg/other/operator2.C: Adjust diagnostic. + * g++.old-deja/g++.jason/operator.C: Likewise. + +2017-10-30 Steven Munroe + + * sse2-check.h: New file. + * sse2-addpd-1.c: New file. + * sse2-addsd-1.c: New file. + * sse2-andnpd-1.c: New file. + * sse2-andpd-1.c: New file. + * sse2-cmppd-1.c: New file. + * sse2-cmpsd-1.c: New file. + * sse2-comisd-1.c: New file. + * sse2-comisd-2.c: New file. + * sse2-comisd-3.c: New file. + * sse2-comisd-4.c: New file. + * sse2-comisd-5.c: New file. + * sse2-comisd-6.c: New file. + * sse2-cvtdq2pd-1.c: New file. + * sse2-cvtdq2ps-1.c: New file. + * sse2-cvtpd2dq-1.c: New file. + * sse2-cvtpd2ps-1.c: New file. + * sse2-cvtps2dq-1.c: New file. + * sse2-cvtps2pd-1.c: New file. + * sse2-cvtsd2si-1.c: New file. + * sse2-cvtsd2si-2.c: New file. + * sse2-cvtsd2ss-1.c: New file. + * sse2-cvtsi2sd-1.c: New file. + * sse2-cvtsi2sd-2.c: New file. + * sse2-cvtss2sd-1.c: New file. + * sse2-cvttpd2dq-1.c: New file. + * sse2-cvttps2dq-1.c: New file. + * sse2-cvttsd2si-1.c: New file. + * sse2-cvttsd2si-2.c: New file. + * sse2-divpd-1.c: New file. + * sse2-divsd-1.c: New file. + * sse2-maxpd-1.c: New file. + * sse2-maxsd-1.c: New file. + * sse2-minpd-1.c: New file. + * sse2-minsd-1.c: New file. + * sse2-mmx.c: New file. + * sse2-movhpd-1.c: New file. + * sse2-movhpd-2.c: New file. + * sse2-movlpd-1.c: New file. + * sse2-movlpd-2.c: New file. + * sse2-movmskpd-1.c: New file. + * sse2-movq-1.c: New file. + * sse2-movq-2.c: New file. + * sse2-movq-3.c: New file. + * sse2-movsd-1.c: New file. + * sse2-movsd-2.c: New file. + * sse2-movsd-3.c: New file. + * sse2-mulpd-1.c: New file. + * sse2-mulsd-1.c: New file. + * sse2-orpd-1.c: New file. + * sse2-packssdw-1.c: New file. + * sse2-packsswb-1.c: New file. + * sse2-packuswb-1.c: New file. + * sse2-paddb-1.c: New file. + * sse2-paddd-1.c: New file. + * sse2-paddq-1.c: New file. + * sse2-paddsb-1.c: New file. + * sse2-paddsw-1.c: New file. + * sse2-paddusb-1.c: New file. + * sse2-paddusw-1.c: New file. + * sse2-paddw-1.c: New file. + * sse2-pavgb-1.c: New file. + * sse2-pavgw-1.c: New file. + * sse2-pcmpeqb-1.c: New file. + * sse2-pcmpeqd-1.c: New file. + * sse2-pcmpeqw-1.c: New file. + * sse2-pcmpgtb-1.c: New file. + * sse2-pcmpgtd-1.c: New file. + * sse2-pcmpgtw-1.c: New file. + * sse2-pextrw.c: New file. + * sse2-pinsrw.c: New file. + * sse2-pmaddwd-1.c: New file. + * sse2-pmaxsw-1.c: New file. + * sse2-pmaxub-1.c: New file. + * sse2-pminsw-1.c: New file. + * sse2-pminub-1.c: New file. + * sse2-pmovmskb-1.c: New file. + * sse2-pmulhuw-1.c: New file. + * sse2-pmulhw-1.c: New file. + * sse2-pmullw-1.c: New file. + * sse2-pmuludq-1.c: New file. + * sse2-psadbw-1.c: New file. + * sse2-pshufd-1.c: New file. + * sse2-pshufhw-1.c: New file. + * sse2-pshuflw-1.c: New file. + * sse2-pslld-1.c: New file. + * sse2-pslld-2.c: New file. + * sse2-pslldq-1.c: New file. + * sse2-psllq-1.c: New file. + * sse2-psllq-2.c: New file. + * sse2-psllw-1.c: New file. + * sse2-psllw-2.c: New file. + * sse2-psrad-1.c: New file. + * sse2-psrad-2.c: New file. + * sse2-psraw-1.c: New file. + * sse2-psraw-2.c: New file. + * sse2-psrld-1.c: New file. + * sse2-psrld-2.c: New file. + * sse2-psrldq-1.c: New file. + * sse2-psrlq-1.c: New file. + * sse2-psrlq-2.c: New file. + * sse2-psrlw-1.c: New file. + * sse2-psrlw-2.c: New file. + * sse2-psubb-1.c: New file. + * sse2-psubd-1.c: New file. + +2017-10-30 Will Schmidt + + * gcc.target/powerpc/fold-vec-perm-longlong.c: Update to use long long + types for testcase arguments. + +2017-10-30 Richard Biener + + PR tree-optimization/82762 + * gcc.dg/torture/pr82762.c: New testcase. + +2017-10-30 Richard Biener + + * gcc.dg/gimplefe-27.c: New testcase. + +2017-10-30 Joseph Myers + + * gcc.dg/c17-version-1.c, gcc.dg/c17-version-2.c: New tests. + +2017-10-30 Jakub Jelinek + + PR middle-end/22141 + * gcc.dg/store_merging_10.c: New test. + * gcc.dg/store_merging_11.c: New test. + * gcc.dg/store_merging_12.c: New test. + * g++.dg/pr71694.C: Add -fno-store-merging to dg-options. + +2017-10-30 Uros Bizjak + + PR target/82725 + * g++.dg/pr82725.C: New test. + +2017-10-29 Jim Wilson + + * lib/gcc-dg.exp (gcc-dg-debug-runtest): Delete -gcoff. + * lib/gfortran-dg.exp (gfortran-dg-debug-runtest): Delete -gcoff. + +2017-10-28 Paolo Carlini + + PR c++/70971 + * g++.dg/torture/pr70971.C: New. + +2017-10-28 Paul Thomas + + PR fortran/81758 + * gfortran.dg/class_63.f90: New test. + +2017-10-27 Steven G. Kargl + + PR fortran/82620 + * gfortran.dg/allocate_error_7.f90: new test. + +2017-10-27 Paolo Carlini + + PR c++/82218 + * g++.dg/cpp1y/constexpr-82218.C: New. + +2017-10-27 Eric Botcazou + + * gnat.dg/opt68.ad[sb]: New test. + +2017-10-27 Daniel Santos + + * gcc.target/i386/pr82196-1.c (dg-options): Add -mno-avx. + +2017-10-27 Michael Meissner + + * gcc.target/powerpc/float128-hw.c: Add support for all 4 FMA + variants. Check various conversions to/from float128. Check + negation. Use {\m...\M} in the tests. + * gcc.target/powerpc/float128-hw2.c: New test for implicit + _Float128 math functions. + * gcc.target/powerpc/float128-hw3.c: New test for strict ansi mode + not implicitly adding the _Float128 math functions. + * gcc.target/powerpc/float128-fma2.c: Delete, test is no longer + valid. + * gcc.target/powerpc/float128-sqrt2.c: Likewise. + +2017-10-27 Uros Bizjak + + PR target/82692 + * gcc.dg/torture/pr82692.c: New test. + +2017-10-27 Will Schmidt + + * gcc.target/powerpc/fold-vec-neg-char.c: New. + * gcc.target/powerpc/fold-vec-neg-floatdouble.c: New. + * gcc.target/powerpc/fold-vec-neg-int.c: New. + * gcc.target/powerpc/fold-vec-neg-longlong.c: New. + * gcc.target/powerpc/fold-vec-neg-short.c: New. + +2017-10-27 Thomas Koenig + + PR fortran/56342 + * gfortran.dg/matmul_const.f90: New test. + +2017-10-25 Jan Hubicka + + * gcc.target/i386/pr70021.c: Add -mtune=skylake. + +2017-10-27 Jakub Jelinek + + PR target/82703 + * gcc.dg/pr82703.c: New test. + +2017-10-27 Prathamesh Kulkarni + + * gcc.dg/ipa/propmalloc-1.c: New test-case. + * gcc.dg/ipa/propmalloc-2.c: Likewise. + * gcc.dg/ipa/propmalloc-3.c: Likewise. + +2017-10-27 Paolo Carlini + + PR c++/71385 + * g++.dg/concepts/pr71385.C: New. + +2017-10-27 Paolo Carlini + + PR c++/80739 + * g++.dg/cpp1y/constexpr-80739.C: New. + +2017-10-27 Richard Biener + + PR middle-end/81659 + * g++.dg/torture/pr81659.C: New testcase. + +2017-10-26 Michael Collison + + * gcc.target/aarch64/fix_trunc1.c: New testcase. + * gcc.target/aarch64/vect-vcvt.c: Fix scan-assembler + directives to allow float or integer destination registers for + fcvtz[su]. + +2017-10-26 Sandra Loosemore + + * gcc.target/nios2/gpopt-r0rel-sec.c: New. + +2017-10-26 Sandra Loosemore + + * gcc.target/nios2/gpopt-gprel-sec.c: New. + +2017-10-26 Olga Makhotina + + * gcc.target/i386/avx512f-vcmpps-1.c (_mm512_cmpeq_ps_mask, + _mm512_cmple_ps_mask, _mm512_cmplt_ps_mask, + _mm512_cmpneq_ps_mask, _mm512_cmpnle_ps_mask, + _mm512_cmpnlt_ps_mask, _mm512_cmpord_ps_mask, + _mm512_cmpunord_ps_mask, _mm512_mask_cmpeq_ps_mask, + _mm512_mask_cmple_ps_mask, _mm512_mask_cmplt_ps_mask, + _mm512_mask_cmpneq_ps_mask, _mm512_mask_cmpnle_ps_mask, + _mm512_mask_cmpnlt_ps_mask, _mm512_mask_cmpord_ps_mask, + _mm512_mask_cmpunord_ps_mask): Test new intrinsics. + * gcc.target/i386/avx512f-vcmpps-2.c (_mm512_cmpeq_ps_mask, + _mm512_cmple_ps_mask, _mm512_cmplt_ps_mask, + _mm512_cmpneq_ps_mask, _mm512_cmpnle_ps_mask, + _mm512_cmpnlt_ps_mask, _mm512_cmpord_ps_mask, + _mm512_cmpunord_ps_mask, _mm512_mask_cmpeq_ps_mask, + _mm512_mask_cmple_ps_mask, _mm512_mask_cmplt_ps_mask, + _mm512_mask_cmpneq_ps_mask, _mm512_mask_cmpnle_ps_mask, + _mm512_mask_cmpnlt_ps_mask, _mm512_mask_cmpord_ps_mask, + _mm512_mask_cmpunord_ps_mask): Test new intrinsics. + * gcc.target/i386/avx512f-vcmppd-1.c (_mm512_cmpeq_pd_mask, + _mm512_cmple_pd_mask, _mm512_cmplt_pd_mask, + _mm512_cmpneq_pd_mask, _mm512_cmpnle_pd_mask, + _mm512_cmpnlt_pd_mask, _mm512_cmpord_pd_mask, + _mm512_cmpunord_pd_mask, _mm512_mask_cmpeq_pd_mask, + _mm512_mask_cmple_pd_mask, _mm512_mask_cmplt_pd_mask, + _mm512_mask_cmpneq_pd_mask, _mm512_mask_cmpnle_pd_mask, + _mm512_mask_cmpnlt_pd_mask, _mm512_mask_cmpord_pd_mask, + _mm512_mask_cmpunord_pd_mask): Test new intrinsics. + * gcc.target/i386/avx512f-vcmppd-2.c (_mm512_cmpeq_pd_mask, + _mm512_cmple_pd_mask, _mm512_cmplt_pd_mask, + _mm512_cmpneq_pd_mask, _mm512_cmpnle_pd_mask, + _mm512_cmpnlt_pd_mask, _mm512_cmpord_pd_mask, + _mm512_cmpunord_pd_mask, _mm512_mask_cmpeq_pd_mask, + _mm512_mask_cmple_pd_mask, _mm512_mask_cmplt_pd_mask, + _mm512_mask_cmpneq_pd_mask, _mm512_mask_cmpnle_pd_mask, + _mm512_mask_cmpnlt_pd_mask, _mm512_mask_cmpord_pd_mask, + _mm512_mask_cmpunord_pd_mask): Test new intrinsics. + +2017-10-26 Wilco Dijkstra + + * gcc.target/aarch64/ldp_stp_unaligned_2.c: New file. + +2017-10-26 James Greenhalgh + + * gcc.target/arm/require-pic-register-loc.c: Use wider regex for + column information. + +2017-10-26 Tamar Christina + + * gcc.dg/vect/vect-reduc-dot-s8a.c + (dg-additional-options, dg-require-effective-target): Add +dotprod. + * gcc.dg/vect/vect-reduc-dot-u8a.c + (dg-additional-options, dg-require-effective-target): Add +dotprod. + +2017-10-26 Tamar Christina + + * lib/target-supports.exp + (check_effective_target_arm_v8_2a_dotprod_neon_ok_nocache): New. + (check_effective_target_arm_v8_2a_dotprod_neon_ok): New. + (add_options_for_arm_v8_2a_dotprod_neon): New. + (check_effective_target_arm_v8_2a_dotprod_neon_hw): New. + (check_effective_target_vect_sdot_qi): Add ARM && AArch64. + (check_effective_target_vect_udot_qi): Likewise. + * gcc.target/arm/simd/vdot-exec.c: New. + * gcc.target/aarch64/advsimd-intrinsics/vdot-exec.c: New. + * gcc/doc/sourcebuild.texi: Document arm_v8_2a_dotprod_neon. + +2017-10-26 Tamar Christina + + * gcc.dg/vect/vect-multitypes-1.c: Correct target selector. + +2017-10-26 Tamar Christina + + * gcc.target/aarch64/inline-lrint_2.c (dg-options): Add -fno-trapping-math. + +2017-10-26 Tamar Christina + + * gcc.target/aarch64/advsimd-intrinsics/vect-dot-qi.h: New. + * gcc.target/aarch64/advsimd-intrinsics/vdot-compile.c: New. + * gcc.target/aarch64/advsimd-intrinsics/vect-dot-s8.c: New. + * gcc.target/aarch64/advsimd-intrinsics/vect-dot-u8.c: New. + +2017-10-25 David Malcolm + + PR c/7356 + PR c/44515 + * c-c++-common/pr44515.c: New test case. + * gcc.dg/pr7356-2.c: New test case. + * gcc.dg/pr7356.c: New test case. + * gcc.dg/spellcheck-typenames.c: Update the "singed" char "TODO" + case to reflect changes to output. + * gcc.dg/noncompile/920923-1.c: Add dg-warning to reflect changes + to output. + +2017-10-25 Eric Botcazou + + * gcc.dg/fold-cond_expr-1.c: Rename to... + * gcc.dg/fold-cond-2.c: ...this. + * gcc.dg/fold-cond-3.c: New test. + +2017-10-25 Richard Biener + + PR tree-optimization/82436 + * gcc.dg/torture/pr82436-2.c: New testcase. + +2017-10-25 Paolo Carlini + + PR c++/71820 + * g++.dg/ext/typeof12.C: New. + +2017-10-25 Tom de Vries + + * gcc.dg/tree-ssa/loop-1.c: Add xfail for nvptx in scan-assembler-times + line, and add nvptx-specific version. + +2017-10-25 Rainer Orth + + * gcc.target/i386/cet-sjlj-5.c: Allow for emtpy user label prefix + in setjmp call. + +2017-10-25 Jakub Jelinek + + PR libstdc++/81706 + * gcc.target/i386/pr81706.c: New test. + * g++.dg/ext/pr81706.C: New test. + +2017-10-24 Jakub Jelinek + + PR target/82460 + * gcc.target/i386/pr82460-1.c: New test. + * gcc.target/i386/pr82460-2.c: New test. + * gcc.target/i386/avx512f-vpermt2pd-1.c: Adjust scan-assembler* + regexps to allow vpermt2* to vpermi2* replacement or vice versa + where possible. + * gcc.target/i386/avx512vl-vpermt2pd-1.c: Likewise. + * gcc.target/i386/avx512f-vpermt2d-1.c: Likewise. + * gcc.target/i386/vect-pack-trunc-2.c: Likewise. + * gcc.target/i386/avx512vl-vpermt2ps-1.c: Likewise. + * gcc.target/i386/avx512vl-vpermt2q-1.c: Likewise. + * gcc.target/i386/avx512f-vpermt2ps-1.c: Likewise. + * gcc.target/i386/avx512vl-vpermt2d-1.c: Likewise. + * gcc.target/i386/avx512bw-vpermt2w-1.c: Likewise. + * gcc.target/i386/avx512vbmi-vpermt2b-1.c: Likewise. + * gcc.target/i386/avx512f-vpermt2q-1.c: Likewise. + + PR target/82370 + * gcc.target/i386/pr82370.c: New test. + +2017-10-24 Paolo Carlini + + PR c++/82466 + * c-c++-common/Wbuiltin-declaration-mismatch-1.c: New. + * c-c++-common/Wno-builtin-declaration-mismatch-1.c: Likewise. + * g++.dg/warn/Wbuiltin_declaration_mismatch-1.C: Likewise. + * g++.dg/parse/builtin2.C: Adjust. + * g++.old-deja/g++.mike/p811.C: Likewise. + +2017-10-24 Paolo Carlini + + PR c++/80991 + * g++.dg/ext/is_trivially_constructible5.C: New. + +2017-10-24 Rainer Orth + + * gcc.target/i386/387-ficom-1.c: Allow for ficomp without s + suffix. + * gcc.target/i386/387-ficom-2.c: Likewise. + +2017-10-24 Rainer Orth + + * gcc.target/i386/cet-sjlj-3.c: Allow for emtpy user label prefix + in setjmp call. + +2017-10-24 Richard Biener + + PR tree-optimization/82697 + * gcc.dg/torture/pr82697.c: New testcase. + +2017-10-24 Mukesh Kapoor + Paolo Carlini + + PR c++/82307 + * g++.dg/cpp0x/enum35.C: New. + * g++.dg/cpp0x/enum36.C: Likewise. + +2017-10-24 H.J. Lu + + PR target/82659 + * gcc.target/i386/cet-label-2.c: New test. + * gcc.target/i386/cet-sjlj-4.c: Likewise. + * gcc.target/i386/cet-sjlj-5.c: Likewise. + * gcc.target/i386/cet-switch-3.c: Likewise. + * gcc.target/i386/pr82659-1.c: Likewise. + * gcc.target/i386/pr82659-2.c: Likewise. + * gcc.target/i386/pr82659-3.c: Likewise. + * gcc.target/i386/pr82659-4.c: Likewise. + * gcc.target/i386/pr82659-5.c: Likewise. + * gcc.target/i386/pr82659-6.c: Likewise. + +2017-10-23 Sandra Loosemore + + * gcc.target/nios2/cdx-branch.c: Fix broken test. + * gcc.target/nios2/lo-addr-bypass.c: New. + * gcc.target/nios2/lo-addr-char.c: New. + * gcc.target/nios2/lo-addr-int.c: New. + * gcc.target/nios2/lo-addr-pic.c: New. + * gcc.target/nios2/lo-addr-short.c: New. + * gcc.target/nios2/lo-addr-tls.c: New. + * gcc.target/nios2/lo-addr-uchar.c: New. + * gcc.target/nios2/lo-addr-ushort.c: New. + * gcc.target/nios2/lo-addr-volatile.c: New. + +2017-10-23 Paolo Carlini + + PR c++/80449 + * g++.dg/cpp1z/class-deduction46.C: New. + +2017-10-23 Jakub Jelinek + + PR debug/82630 + * g++.dg/guality/pr82630.C: New test. + +2017-10-23 Uros Bizjak + + PR target/82662 + * gcc.target/i386/pr82662.c: New test. + +2017-10-23 Marek Polacek + + PR c/82681 + * gcc.dg/c90-const-expr-11.c: Fix typos in dg-warning. + * gcc.dg/overflow-warn-5.c: Likewise. + * gcc.dg/overflow-warn-8.c: Likewise. + +2017-10-23 H.J. Lu + + PR target/82673 + * gcc.target/i386/pr82673.c: New test. + +2017-10-23 Jakub Jelinek + + * lib/scanasm.exp (dg-function-on-line): Accept optional column info. + * gcc.dg/debug/dwarf2/pr53948.c: Likewise. + * g++.dg/debug/dwarf2/pr77363.C: Likewise. + * gcc.dg/debug/dwarf2/asm-line1.c: Add -gno-column-info to dg-options. + * gcc.dg/debug/dwarf2/discriminator.c: Likewise. + * g++.dg/debug/dwarf2/typedef6.C: Likewise. + +2017-10-23 Richard Biener + + PR tree-optimization/82672 + * gfortran.dg/graphite/pr82672.f90: New testcase. + +2017-10-23 Paolo Carlini + + PR c++/77555 + * g++.dg/torture/pr77555.C: New. + +2017-10-23 Richard Biener + + PR tree-optimization/82129 + * gcc.dg/torture/pr82129.c: New testcase. + +2017-10-22 Uros Bizjak + + PR target/52451 + * gcc.dg/torture/pr52451.c: New test. + +2017-10-22 Uros Bizjak + Jakub Jelinek + + PR target/82628 + * gcc.dg/torture/pr82628.c: New test. + +2017-10-22 Igor Tsimbalist + + * c-c++-common/attr-nocf-check-1a.c: Remove test. + * c-c++-common/attr-nocf-check-3a.c: Likewise. + * gcc.target/i386/attr-nocf-check-1a.c: Add test. + * gcc.target/i386/attr-nocf-check-3a.c: Likewise. + +2017-10-21 Igor Tsimbalist + + * c-c++-common/attr-nocf-check-1.c: Shorten a cheking message. + * c-c++-common/attr-nocf-check-3.c: Likewise. + * c-c++-common/fcf-protection-1.c: Add x86 specific message. + * c-c++-common/fcf-protection-2.c: Likewise. + * c-c++-common/fcf-protection-3.c: Likewise. + * c-c++-common/fcf-protection-5.c: Likewise. + * c-c++-common/attr-nocf-check-1a.c: New test. + * c-c++-common/attr-nocf-check-3a.c: Likewise. + * g++.dg/cet-notrack-1.C: Likewise. + * gcc.target/i386/cet-intrin-1.c: Likewise. + * gcc.target/i386/cet-intrin-10.c: Likewise. + * gcc.target/i386/cet-intrin-2.c: Likewise. + * gcc.target/i386/cet-intrin-3.c: Likewise. + * gcc.target/i386/cet-intrin-4.c: Likewise. + * gcc.target/i386/cet-intrin-5.c: Likewise. + * gcc.target/i386/cet-intrin-6.c: Likewise. + * gcc.target/i386/cet-intrin-7.c: Likewise. + * gcc.target/i386/cet-intrin-8.c: Likewise. + * gcc.target/i386/cet-intrin-9.c: Likewise. + * gcc.target/i386/cet-label.c: Likewise. + * gcc.target/i386/cet-notrack-1a.c: Likewise. + * gcc.target/i386/cet-notrack-1b.c: Likewise. + * gcc.target/i386/cet-notrack-2a.c: Likewise. + * gcc.target/i386/cet-notrack-2b.c: Likewise. + * gcc.target/i386/cet-notrack-3.c: Likewise. + * gcc.target/i386/cet-notrack-4a.c: Likewise. + * gcc.target/i386/cet-notrack-4b.c: Likewise. + * gcc.target/i386/cet-notrack-5a.c: Likewise. + * gcc.target/i386/cet-notrack-5b.c: Likewise. + * gcc.target/i386/cet-notrack-6a.c: Likewise. + * gcc.target/i386/cet-notrack-6b.c: Likewise. + * gcc.target/i386/cet-notrack-7.c: Likewise. + * gcc.target/i386/cet-property-1.c: Likewise. + * gcc.target/i386/cet-property-2.c: Likewise. + * gcc.target/i386/cet-rdssp-1.c: Likewise. + * gcc.target/i386/cet-sjlj-1.c: Likewise. + * gcc.target/i386/cet-sjlj-2.c: Likewise. + * gcc.target/i386/cet-sjlj-3.c: Likewise. + * gcc.target/i386/cet-switch-1.c: Likewise. + * gcc.target/i386/cet-switch-2.c: Likewise. + * lib/target-supports.exp (check_effective_target_cet): New proc. + +2017-10-20 Jan Hubicka + + * gcc.target/i386/pr79683.c: Disable costmodel. + +2017-10-21 Eric Botcazou + + * gnat.dg/specs/discr_private.ads: Rename into ... + * gnat.dg/specs/discr2.ads: ...this. + * gnat.dg/specs/discr_record_constant.ads: Rename into... + * gnat.dg/specs/discr3.ads: ...this. + * gnat.dg/specs/discr4.ads: New test. + * gnat.dg/specs/discr4_pkg.ads: New helper. + +2017-10-21 Paul Thomas + + PR fortran/82586 + * gfortran.dg/pdt_16.f03 : New test. + * gfortran.dg/pdt_4.f03 : Catch the changed messages. + * gfortran.dg/pdt_8.f03 : Ditto. + + PR fortran/82587 + * gfortran.dg/pdt_17.f03 : New test. + + PR fortran/82589 + * gfortran.dg/pdt_18.f03 : New test. + +2017-10-20 Igor Tsimbalist + + * c-c++-common/fcf-protection-1.c: New test. + * c-c++-common/fcf-protection-2.c: Likewise. + * c-c++-common/fcf-protection-3.c: Likewise. + * c-c++-common/fcf-protection-4.c: Likewise. + * c-c++-common/fcf-protection-5.c: Likewise. + * c-c++-common/attr-nocf-check-1.c: Likewise. + * c-c++-common/attr-nocf-check-2.c: Likewise. + * c-c++-common/attr-nocf-check-3.c: Likewise. + +2017-10-20 Ed Schonberg + + * gnat.dg/sync_iface_call.adb, gnat.dg/sync_iface_call_pkg.ads, + gnat.dg/sync_iface_call_pkg2.adb, gnat.dg/sync_iface_call_pkg2.ads: + New testcase. + +2017-10-20 Justin Squirek + + * gnat.dg/default_pkg_actual.adb, gnat.dg/default_pkg_actual2.adb: New + testcases. + +2017-10-20 Ed Schonberg + + * gnat.dg/dimensions.adb, gnat.dg/dimensions.ads: New testcase. + +2017-10-20 Richard Biener + + PR tree-optimization/82473 + * gcc.dg/torture/pr82473.c: New testcase. + +2017-10-20 Richard Biener + + PR tree-optimization/82603 + * gcc.dg/torture/pr82603.c: New testcase. + +2017-10-20 Tom de Vries + + * gcc.dg/tree-ssa/ldist-27.c: Remove dg-require-stack-size. + (main): Move s ... + (s): ... here. + +2017-10-20 Jakub Jelinek + + PR target/82158 + * gcc.dg/tree-ssa/noreturn-1.c: New test. + + PR target/82370 + * gcc.target/i386/avx-pr82370.c: New test. + * gcc.target/i386/avx2-pr82370.c: New test. + * gcc.target/i386/avx512f-pr82370.c: New test. + * gcc.target/i386/avx512bw-pr82370.c: New test. + * gcc.target/i386/avx512vl-pr82370.c: New test. + * gcc.target/i386/avx512vlbw-pr82370.c: New test. + +2017-10-20 Orlando Arias + + * lib/target-supports.exp (check_effective_target_keeps_null_pointer_checks): + Add msp430 to the list. + +2017-10-19 Paolo Carlini + + PR c++/82308 + * g++.dg/cpp1z/class-deduction45.C: New. + +2017-10-19 Uros Bizjak + Jakub Jelinek + + PR target/82618 + * gcc.target/i386/pr82618.c: New test. + +2017-10-19 Martin Sebor + + PR tree-optimization/82596 + * gcc/testsuite/gcc.dg/pr82596.c: New test. + +2017-10-19 Eric Botcazou + + * gcc.dg/Walloca-15.c: New test. + * gnat.dg/stack_usage4.adb: Likewise. + * gnat.dg/stack_usage4_pkg.ads: New helper. + +2017-10-19 Jakub Jelinek + + PR c++/82600 + * g++.dg/warn/Wreturn-local-addr-4.C: New test. + +2017-10-19 Eric Botcazou + + * gcc.dg/debug/dwarf2/sso.c: Rename into... + * gcc.dg/debug/dwarf2/sso-1.c: ...this. + * gcc.dg/debug/dwarf2/sso-2.c: New test. + * gcc.dg/debug/dwarf2/sso-3.c: Likewise. + +2017-10-19 Richard Earnshaw + + PR target/82445 + * gcc.target/arm/peep-ldrd-1.c: Tighten test scan pattern. + * gcc.target/arm/peep-strd-1.c: Likewise. + * gcc.target/arm/peep-ldrd-2.c: New test. + * gcc.target/arm/peep-strd-2.c: New test. + +2017-10-19 Jakub Jelinek + + * c-c++-common/ubsan/builtin-1.c: New test. + + * c-c++-common/ubsan/float-cast-overflow-1.c: Drop value keyword + from expected output regexps. + * c-c++-common/ubsan/float-cast-overflow-2.c: Likewise. + * c-c++-common/ubsan/float-cast-overflow-3.c: Likewise. + * c-c++-common/ubsan/float-cast-overflow-4.c: Likewise. + * c-c++-common/ubsan/float-cast-overflow-5.c: Likewise. + * c-c++-common/ubsan/float-cast-overflow-6.c: Likewise. + * c-c++-common/ubsan/float-cast-overflow-8.c: Likewise. + * c-c++-common/ubsan/float-cast-overflow-9.c: Likewise. + * c-c++-common/ubsan/float-cast-overflow-10.c: Likewise. + * g++.dg/ubsan/float-cast-overflow-bf.C: Likewise. + * gcc.dg/ubsan/float-cast-overflow-bf.c: Likewise. + * g++.dg/asan/default-options-1.C (__asan_default_options): Add + used attribute. + * g++.dg/asan/asan_test.C: Run with ASAN_OPTIONS=handle_segv=2 + in the environment. + + PR target/82580 + * gcc.target/i386/pr82580.c: Use {\msbb} instead of "sbb" in + scan-assembler-times. Check that there are no movzb* instructions + if lp64. + +2017-10-19 Tom de Vries + + * gcc.dg/tree-ssa/ldist-27.c: Use dg-require-stack-size. + +2017-10-19 Tom de Vries + + * lib/target-supports-dg.exp (dg-require-stack-size): New proc. + * gcc.c-torture/execute/20030209-1.c: Use dg-require-stack-size. + * gcc.c-torture/execute/20040805-1.c: Same. + * gcc.c-torture/execute/920410-1.c: Same. + * gcc.c-torture/execute/921113-1.c: Same. + * gcc.c-torture/execute/921208-2.c: Same. + * gcc.c-torture/execute/comp-goto-1.c: Same. + * gcc.c-torture/execute/pr20621-1.c: Same. + * gcc.c-torture/execute/pr28982b.c: Same. + * gcc.dg/tree-prof/comp-goto-1.c: Same. + +2017-10-19 Martin Liska + + PR sanitizer/82517 + * gcc.dg/asan/pr82517.c: New test. + +2017-10-19 Jakub Jelinek + + PR fortran/82568 + * gfortran.dg/gomp/pr82568.f90: New test. + +2017-10-19 Bernhard Reutner-Fischer + + * gfortran.dg/spellcheck-operator.f90: New testcase. + * gfortran.dg/spellcheck-procedure_1.f90: New testcase. + * gfortran.dg/spellcheck-procedure_2.f90: New testcase. + * gfortran.dg/spellcheck-structure.f90: New testcase. + * gfortran.dg/spellcheck-parameter.f90: New testcase. + +2017-10-18 Thomas Koenig + + PR fortran/82567 + * gfortran.dg/array_constructor_51.f90: New test. + +2017-10-18 Thomas Koenig + + PR fortran/79795 + * gfortran.dg/assumed_size_2.f90: New test. + +2017-10-18 Uros Bizjak + Jakub Jelinek + + PR target/82580 + * gcc.target/i386/pr82580.c: New test. + +2017-10-18 Thomas Koenig + + PR libfortran/82233 + * gfortran.dg/execute_command_line_3.f90: Remove unneeded output. + Move test with wait=.false. before the last test. + +2017-10-18 Vladimir Makarov + + PR middle-end/82556 + * gcc.target/i386/pr82556.c: New. + +2017-10-18 Bin Cheng + + * gcc.dg/tree-ssa/ldist-17.c: Adjust test string. + * gcc.dg/tree-ssa/ldist-32.c: New test. + * gcc.dg/tree-ssa/ldist-35.c: New test. + * gcc.dg/tree-ssa/ldist-36.c: New test. + +2017-10-18 Bin Cheng + + PR tree-optimization/82574 + * gcc.dg/tree-ssa/pr82574.c: New test. + +2017-10-18 Martin Liska + + * gcc.dg/tree-prof/switch-case-2.c: Scan IPA profile dump + file instead of expand. Reason is that switch statement is + not yet expanded as decision tree, which also contains a BB + with count == 2000. + +017-10-18 Paul Thomas + + PR fortran/82550 + * gfortran.dg/submodule_30.f08 : New test. + +2017-10-18 Andreas Krebbel + + * gcc.target/s390/zvector/vec-cmp-2.c + (all_eq_double, all_ne_double, all_gt_double) + (all_lt_double, all_ge_double, all_le_double) + (any_eq_double, any_ne_double, any_gt_double) + (any_lt_double, any_ge_double, any_le_double) + (all_eq_int, all_ne_int, all_gt_int) + (all_lt_int, all_ge_int, all_le_int) + (any_eq_int, any_ne_int, any_gt_int) + (any_lt_int, any_ge_int, any_le_int): Set global variable instead + of calling foo(). Fix return type. + +2017-10-18 Martin Liska + + PR sanitizer/82545 + * gcc.dg/asan/pr82545.c: New test. + +2017-10-18 Paolo Carlini + + PR c++/69057 + * g++.dg/cpp1y/auto-fn45.C: New. + +2017-10-18 Paolo Carlini + + PR c++/68884 + * g++.dg/cpp0x/variadic-crash4.C: New. + +2017-10-18 Paolo Carlini + + PR c++/79474 + * g++.dg/cpp1y/auto-fn44.C: New. + +2017-10-17 Eric Botcazou + + * gcc.dg/attr-alloc_size-11.c: UnXFAIL for visium-*-*. + +2017-10-17 Paolo Carlini + + PR c++/71821 + * g++.dg/cpp0x/alignas12.C: New. + +2017-10-17 Paolo Carlini + + PR c++/71368 + * g++.dg/concepts/pr71368.C: New. + +2017-10-17 Nathan Sidwell + + PR c++/82560 + * g++.dg/cpp0x/pr82560.C: New. + + PR middle-end/82577 + * g++.dg/opt/pr82577.C: New. + +2017-10-17 Qing Zhao + Wilco Dijkstra + + PR middle-end/80295 + * gcc.target/aarch64/pr80295.c: New test. + +2017-10-17 Richard Biener + + PR tree-optimization/82563 + * gcc.dg/graphite/pr82563.c: New testcase. + +2017-10-17 Paolo Carlini + + PR c++/67831 + * g++.dg/cpp0x/constexpr-ice18.C: New. + +2017-10-17 Paolo Carlini + + PR c++/82570 + * g++.dg/cpp1z/constexpr-lambda18.C: New. + +2017-10-17 Jakub Jelinek + + PR tree-optimization/82549 + * gcc.c-torture/compile/pr82549.c: New test. + +2017-10-17 Martin Liska + + * lib/scanasm.exp: Print how many times a regex pattern is + found. + * lib/scandump.exp: Likewise. + +2017-10-17 Olga Makhotina + + * gcc.target/i386/avx512dq-vreducesd-1.c (_mm_mask_reduce_sd, + _mm_maskz_reduce_sd): Test new intrinsics. + * gcc.target/i386/avx512dq-vreducesd-2.c: New. + * gcc.target/i386/avx512dq-vreducess-1.c (_mm_mask_reduce_ss, + _mm_maskz_reduce_ss): Test new intrinsics. + * gcc.target/i386/avx512dq-vreducess-2.c: New. + * gcc.target/i386/avx-1.c (__builtin_ia32_reducesd, + __builtin_ia32_reducess): Remove builtin. + (__builtin_ia32_reducesd_mask, + __builtin_ia32_reducess_mask): Test new builtin. + * gcc.target/i386/sse-13.c: Ditto. + * gcc.target/i386/sse-23.c: Ditto. + +2017-10-16 Martin Liska + + * c-c++-common/ubsan/attrib-5.c (float_cast2): Fix warning scan + so that it will work for both C and C++ FEs. + +2017-10-16 Fritz Reese + + PR fortran/82511 + * gfortran.dg/dec_structure_22.f90: New testcase. + +2017-10-16 Paolo Carlini + + PR c++/64931 + * g++.dg/cpp1y/auto-fn43.C: New. + +2017-10-16 Wilco Dijkstra + + PR target/82442 + * gcc.dg/vect/pr31699.c: Fix testcase. + +2017-10-16 Tamar Christina + + * gcc.target/aarch64/advsimd-intrinsics/vect-dot-qi.h: New. + * gcc.target/aarch64/advsimd-intrinsics/vdot-compile.c: New. + * gcc.target/aarch64/advsimd-intrinsics/vect-dot-s8.c: New. + * gcc.target/aarch64/advsimd-intrinsics/vect-dot-u8.c: New. + +2017-10-16 Jakub Jelinek + + PR c++/53574 + * g++.dg/other/pr53574.C: New test. + +2017-10-16 Paolo Carlini + + PR c++/61323 + * g++.dg/cpp0x/constexpr-61323.C: New. + +2017-10-15 Paolo Carlini + + PR c++/54090 + * g++.dg/template/crash128.C: New. + +2017-10-15 Thomas Koenig + + PR fortran/82372 + * gfortran.dg/illegal_char.f90: New test. + 2017-10-14 Kyrylo Tkachov Michael Collison diff --git a/gcc/testsuite/brig.dg/test/gimple/internal-casts.hsail b/gcc/testsuite/brig.dg/test/gimple/internal-casts.hsail new file mode 100644 index 00000000000..52673c9e65a --- /dev/null +++ b/gcc/testsuite/brig.dg/test/gimple/internal-casts.hsail @@ -0,0 +1,146 @@ +module &module:1:0:$full:$large:$default; + +/* Test for casting from/to representation of HSA registers. */ + +/* HSA registers are untyped but in gccbrig they are presented as */ +/* variables with a type selected by analysis. Currently, each */ +/* register variable, per function, has a type as it is used at */ +/* most. Therefore, register variable can be nearly any type. The */ +/* tests makes sure the generic/tree expressions have the right casts */ +/* from/to the register variables. */ + + +/* { dg-do compile } */ +/* { dg-options "-fdump-tree-original" } */ + +prog kernel &Kernel(kernarg_u64 %input_ptr, kernarg_u64 %output_ptr) +{ + private_u64 %foo; + private_u64 %bar; + private_b128 %baz; + + ld_kernarg_u64 $d0, [%input_ptr]; + ld_global_u32 $s0, [$d0]; + + /* Trick gccbrig to set wanted type for the registers. */ + +/* $s0 is selected as float... */ +/* { dg-final { scan-tree-dump " s0;" "original"} } */ +/* ..., therefore, there should not be any casts. */ +/* { dg-final { scan-tree-dump "s10 = s0 \\\+ s0;" "original"} } */ + + add_f32 $s10, $s0, $s0; + add_f32 $s10, $s0, $s0; + add_f32 $s10, $s0, $s0; + add_f32 $s10, $s0, $s0; + add_f32 $s10, $s0, $s0; + +/* Expression with other type, a cast is needed. */ +/* { dg-final { scan-tree-dump "s1 = VIEW_CONVERT_EXPR.s0. \\\+ 123;" "original"} } */ + + add_u32 $s1, $s0, 123; + +/* { dg-final { scan-tree-dump "unsigned int s1;" "original"} } */ + + add_u32 $s10, $s1, 0; + add_u32 $s10, $s1, 0; + add_u32 $s10, $s1, 0; + add_u32 $s10, $s1, 0; + add_u32 $s10, $s1, 0; + +/* { dg-final { scan-tree-dump "s0 = VIEW_CONVERT_EXPR<>.s1.;" "original"} } */ + + mov_b32 $s0, $s1; + +/* Rig the election for $d0 to be double. */ +/* { dg-final { scan-tree-dump " d0;" "original"} } */ +/* { dg-final { scan-tree-dump "d10 = d0 \\\+ d0;" "original"} } */ + + add_f64 $d10, $d0, $d0; + add_f64 $d10, $d0, $d0; + add_f64 $d10, $d0, $d0; + add_f64 $d10, $d0, $d0; + add_f64 $d10, $d0, $d0; + +/* Make $s2 to be vector type. */ +/* { dg-final { scan-tree-dump "vector.4. unsigned char s2;" "original"} } */ +/* { dg-final { scan-tree-dump "s2 = VIEW_CONVERT_EXPR\\\(s1\\\) \\\+ VIEW_CONVERT_EXPR\\\(s1\\\);" "original"} } */ + + add_pp_u8x4 $s2, $s1, $s1; + +/* { dg-final { scan-tree-dump "s20 = s2 \\\+ s2;" "original"} } */ + + add_pp_u8x4 $s20, $s2, $s2; + add_pp_u8x4 $s20, $s2, $s2; + add_pp_u8x4 $s20, $s2, $s2; + add_pp_u8x4 $s20, $s2, $s2; + +/* { dg-final { scan-tree-dump "d0 = VIEW_CONVERT_EXPR<>.{VIEW_CONVERT_EXPR.s0., VIEW_CONVERT_EXPR.s2.}.;" "original"} } */ + + combine_v2_b64_b32 $d0, ($s0, $s2); + +/* { dg-final { scan-tree-dump "s2 = VIEW_CONVERT_EXPR.BIT_FIELD_REF .;" "original"} } */ +/* { dg-final { scan-tree-dump "s1 = BIT_FIELD_REF ;" "original"} } */ + + expand_v2_b32_b64 ($s2, $s1), $d0; + +/* { dg-final { scan-tree-dump "s0 = VIEW_CONVERT_EXPR<>\\\(.*VIEW_CONVERT_EXPR.s0\[\)\]*;" "original"} } */ + + cvt_s16_s8 $s0, $s0; + +/* { dg-final { scan-tree-dump "c0 = .*VIEW_CONVERT_EXPR<>.s2..* != 0;" "original"} } */ + + cvt_b1_f32 $c0, $s2; + +/* { dg-final { scan-tree-dump ".*__private_base_addr.* = .*\\\(unsigned char\\\) VIEW_CONVERT_EXPR\\\(s0\\\)\[\)\]*;" "original"} } */ + + st_private_u8 $s0, [%foo]; + +/* { dg-final { scan-tree-dump ".*__private_base_addr.* = .*\\\(unsigned short\\\) VIEW_CONVERT_EXPR\\\(s2\\\)\[\)\]*;" "original"} } */ + + st_private_u16 $s2, [%bar]; + +/* { dg-final { scan-tree-dump "mem_read.\[0-9\]* = \\\*\\\(signed char \\\*\\\) \\\(__private_base_addr .*\\\);\[ \n\]*s2 = VIEW_CONVERT_EXPR\\\(\\\(signed int\\\) mem_read.\[0-9\]*\\\);" "original"} } */ + + ld_private_s8 $s2, [%foo]; + +/* { dg-final { scan-tree-dump "mem_read.\[0-9\]* = \\\*\\\(signed short \\\*\\\) \\\(__private_base_addr .*\\\);\[ \n\]*s0 = VIEW_CONVERT_EXPR<>\\\(\\\(signed int\\\) mem_read.\[0-9\]*\\\);" "original"} } */ + + ld_private_s16 $s0, [%bar]; + +/* { dg-final { scan-tree-dump "\\\*\\\( \\\*\\\) \\\(__private_base_addr.*\\\) \\\+ 0 = s0;" "original"} } */ +/* { dg-final { scan-tree-dump "\\\*\\\( \\\*\\\) \\\(__private_base_addr.*\\\) \\\+ 4 = VIEW_CONVERT_EXPR<>\\\(s1\\\);" "original"} } */ +/* { dg-final { scan-tree-dump "\\\*\\\( \\\*\\\) \\\(__private_base_addr.*\\\) \\\+ 8 = VIEW_CONVERT_EXPR<>\\\(s2\\\);" "original"} } */ + + st_v3_private_f32 ($s0, $s1, $s2), [%baz]; + +/* { dg-final { scan-tree-dump "mem_read.\[0-9\]* = \\\*\\\(signed short \\\*\\\) \\\(__private_base_addr.*\\\) \\\+ 0;\[ \n\]*s0 = VIEW_CONVERT_EXPR<>\\\(\\\(signed int\\\) mem_read.\[0-9\]*\\\);" "original"} } */ +/* { dg-final { scan-tree-dump "mem_read.\[0-9\]* = \\\*\\\(signed short \\\*\\\) \\\(__private_base_addr.*\\\) \\\+ 2;\[ \n\]*s1 = VIEW_CONVERT_EXPR\\\(\\\(signed int\\\) mem_read.\[0-9\]*\\\);" "original"} } */ +/* { dg-final { scan-tree-dump "mem_read.\[0-9\]* = \\\*\\\(signed short \\\*\\\) \\\(__private_base_addr.*\\\) \\\+ 4;\[ \n\]*s2 = VIEW_CONVERT_EXPR\\\(\\\(signed int\\\) mem_read.\[0-9\]*\\\);" "original"} } */ + + ld_v3_private_s16 ($s0, $s1, $s2), [%baz]; + +/* { dg-final { scan-tree-dump "s5 = .*VIEW_CONVERT_EXPR\\\(s0\\\) == VIEW_CONVERT_EXPR\\\(s2\\\)\\\) .*;" "original"} } */ + + cmp_eq_s32_u32 $s5, $s0, $s2; + +/* { dg-final { scan-tree-dump "s6 = VIEW_CONVERT_EXPR<>\\\(.*VIEW_CONVERT_EXPR\\\(s0\\\).*VIEW_CONVERT_EXPR\\\(s2\\\).*;" "original"} } */ + + cmp_eq_pp_u16x2_u16x2 $s6, $s0, $s2; + +/* { dg-final { scan-tree-dump " s60;" "original"} } */ + + add_f32 $s60, $s6, $s6; + add_f32 $s60, $s6, $s6; + add_f32 $s60, $s6, $s6; + add_f32 $s60, $s6, $s6; + + ld_kernarg_u64 $d0, [%output_ptr]; + st_global_u32 $s0, [$d0]; + + ret; +}; + + + + diff --git a/gcc/testsuite/brig.dg/test/gimple/packed.hsail b/gcc/testsuite/brig.dg/test/gimple/packed.hsail index 9219ffd480d..4cba5fcbba0 100644 --- a/gcc/testsuite/brig.dg/test/gimple/packed.hsail +++ b/gcc/testsuite/brig.dg/test/gimple/packed.hsail @@ -42,7 +42,7 @@ prog kernel &Kernel(kernarg_u64 %input_ptr, kernarg_u64 %output_ptr) ret; }; -/* The b128 load is done using uint128_t*. +/* The b128 load is done using uint128_t*. */ /* { dg-final { scan-tree-dump "q0 = VIEW_CONVERT_EXPR\\\(mem_read.\[0-9\]+\\\);" "original"} } */ /* Before arithmetics, the uint128_t is casted to a vector datatype. */ @@ -52,27 +52,25 @@ prog kernel &Kernel(kernarg_u64 %input_ptr, kernarg_u64 %output_ptr) /* in comparison to the HSAIL syntax. */ /* { dg-final { scan-tree-dump "\\\+ { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }" "original"} } */ -/* After arithmetics, the vector DT is casted back to a uint128_t. */ -/* { dg-final { scan-tree-dump "q1 = VIEW_CONVERT_EXPR" "original"} } */ - /* Broadcasted the constant vector's lowest element and summed it up in the next line. */ -/* { dg-final { scan-tree-dump "= { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 };\[\n \]+_\[0-9\]+ = _\[0-9\]+ \\\+ _\[0-9\]+;" "gimple"} } */ +/* { dg-final { scan-tree-dump "= { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 };\[\n \]+\[a-z0-9_\]+ = \[a-z0-9_\]+ \\\+ \[a-z0-9_\]+;" "gimple"} } */ /* Broadcasted the registers lowest element via a VEC_PERM_EXPR that has an all-zeros mask. */ -/* { dg-final { scan-tree-dump "VEC_PERM_EXPR <_\[0-9\]+, _\[0-9\]+, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }>;" "gimple" } } */ +/* { dg-final { scan-tree-dump "VEC_PERM_EXPR <\[a-z0-9_\]+, \[a-z0-9_\]+, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }>;" "gimple" } } */ /* For the add_ss we assume performing the computation over the whole vector is cheaper than */ /* extracting the scalar and performing a scalar operation. This aims to stay in the vector /* datapath as long as possible. */ -/* { dg-final { scan-tree-dump "_\[0-9\]+ = VIEW_CONVERT_EXPR\\\(q2\\\);\[\n \]+_\[0-9\]+ = VIEW_CONVERT_EXPR\\\(q3\\\);\[\n \]+_\[0-9\]+ = _\[0-9\]+ \\\+ _\[0-9\]+;" "gimple" } } */ +/* { dg-final { scan-tree-dump "_\[0-9\]+ = q2 \\\+ q3;" "gimple" } } */ /* Insert the lowest element of the result to the lowest element of the result register. */ -/* { dg-final { scan-tree-dump "= VEC_PERM_EXPR <_\[0-9\]+, new_output.\[0-9\]+_\[0-9\]+, { 16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }>;" "gimple" } } */ +/* { dg-final { scan-tree-dump "= VEC_PERM_EXPR <\[a-z0-9_\]+, new_output.\[0-9\]+_\[0-9\]+, { 16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }>;" "gimple" } } */ -/* { dg-final { scan-tree-dump "q4 = VIEW_CONVERT_EXPR\\\(s_output.\[0-9\]+_\[0-9\]+\\\);" "gimple" } } */ +/* FIXME */ +/* { dg-final { scan-tree-dump "q4 = \(VIEW_CONVERT_EXPR\\\()?s_output.\[0-9\]+\(_\[0-9\]+\)*\\\)?;" "gimple" } } */ /* The saturating arithmetics are (curently) implemented using scalar builtin calls. */ /* { dg-final { scan-tree-dump-times "= __builtin___hsail_sat_add_u8" 64 "gimple" } } */ /* A single operand vector instr (neg.) */ -/* { dg-final { scan-tree-dump " = VIEW_CONVERT_EXPR\\\(q8\\\);\[\n \]+_\[0-9\]+ = -_\[0-9\]+;\[\n \]+" "gimple" } } */ +/* { dg-final { scan-tree-dump "= VIEW_CONVERT_EXPR\\\(\(s_output.\[0-9\]+_\[0-9\]+|q8\)\\\);\[\n \]+q9 = -_\[0-9\]+;\[\n \]+" "gimple" } } */ diff --git a/gcc/testsuite/brig.dg/test/gimple/vector.hsail b/gcc/testsuite/brig.dg/test/gimple/vector.hsail index 20718408e27..75293339542 100644 --- a/gcc/testsuite/brig.dg/test/gimple/vector.hsail +++ b/gcc/testsuite/brig.dg/test/gimple/vector.hsail @@ -32,18 +32,18 @@ prog kernel &Kernel(kernarg_u64 %input_ptr, kernarg_u64 %output_ptr) /* { dg-final { scan-tree-dump " = MEM\\\[\\\(vector\\\(2\\\) \\\*\\\)" "original"} } */ /* The v3 load is scalarized (at the moment) due to gcc requiring 2's exponent wide vectors. */ -/* { dg-final { scan-tree-dump "s0 = VIEW_CONVERT_EXPR\\\(BIT_FIELD_REF \\\);\[\n ]+s1 = VIEW_CONVERT_EXPR\\\(BIT_FIELD_REF \\\);" "original"} } */ +/* { dg-final { scan-tree-dump "s0 = .*BIT_FIELD_REF \\\)?;\[\n ]+s1 = .*BIT_FIELD_REF \\\)?;" "original"} } */ /* The v4 load is done via casting to a vector datatype ptr. */ /* { dg-final { scan-tree-dump " = MEM\\\[\\\(vector\\\(4\\\) \\\*\\\)" "original"} } */ /* The combines are generated to vector constructors. */ -/* { dg-final { scan-tree-dump "{s1, s0}" "original"} } */ -/* { dg-final { scan-tree-dump "{s2, s3}" "original"} } */ +/* { dg-final { scan-tree-dump "{.*s1\\\)?, .*s0\\\)?}" "original"} } */ +/* { dg-final { scan-tree-dump "{.*s2\\\)?, .*s3\\\)?}" "original"} } */ /* Expands to BIT_FIELD_REFs. */ -/* { dg-final { scan-tree-dump "s0 = BIT_FIELD_REF ;" "original"} } */ -/* { dg-final { scan-tree-dump "s3 = BIT_FIELD_REF ;" "original"} } */ +/* { dg-final { scan-tree-dump "s0 = \(VIEW_CONVERT_EXPR.*\\\(\)?BIT_FIELD_REF \\\)?;" "original"} } */ +/* { dg-final { scan-tree-dump "s3 = \(VIEW_CONVERT_EXPR.*\\\(\)?BIT_FIELD_REF \\\)?;" "original"} } */ /* The v1 store is done via casting to a vector datatype ptr and constructing a vector from the inputs. */ /* { dg-final { scan-tree-dump "MEM\\\[\\\(vector\\\(2\\\) \\\*\\\)\\\( \\\*\\\) d1\\\] = " "original"} } */