PR middle-end/13696
* fold-const.c (fold_convert): New function to provide type
conversion to the middle-end without using convert.
(negate_expr, associate_trees, size_diffop, omit_one_operand,
operand_equal_for_comparison_p, pedantic_omit_one_operand,
invert_truthvalue, optimize_bit_field_compare, range_binop,
decode_field_reference, make_range, build_range_check, unextend,
fold_truthop, extract_muldiv_1, fold_mathfn_compare,
fold_binary_op_with_conditional_arg, fold_inf_compare,
fold_single_bit_test, fold, multiple_of_p): Replace all calls to
convert with calls to fold_convert.
* g++.dg/opt/fold1.C: New test case.
From-SVN: r77464
* genrecog.c (find_operand): add extra argument stop.
(validate_pattern): Verify that mach_dup is duplicating operand
defined lexically earlier.
From-SVN: r77461
* fold-const.c (negate_expr_p, negate_expr): Optimize -(A+B) into
either (-A)-B or (-B)-A, if A or B is easily negated respectively.
(fold) <MINUS_EXPR>: Optimize (A*C) - (B*C) -> (A-B)*C for both
integer types and floating point with unsafe_math_optimizations.
Add similar optimization for (A*C1) - (A*C2) -> A*(C1-C2).
Optimize A - B as A + (-B), if B is easily negated.
From-SVN: r77453
* config/rs6000/t-linux64 (LIB2FUNCS_EXTRA): Add darwin-ldouble.c.
(SHLIB_MAPFILES): Add libgcc-ppc64.ver.
(SHLIB_MKMAP_OPTS): Delete.
(TARGET_LIBGCC2_CFLAGS): Add -specs.
(bispecs): Add rule.
* config/rs6000/libgcc-ppc64.ver: New file.
* config/rs6000/ppc64-fp.c (__fixtfdi, __floatditf): New functions.
(__floatdidf, __floatdisf): Optimize multiply.
(__fixunstfdi): New function.
* config/rs6000/rs6000.c (rs6000_complex_function_value): Allow for
real and imag parts larger than one register.
(function_arg): Correct type of reg used when fp arg split partially
to stack.
* config/rs6000/darwin-ldouble.c: Protect with #if !_SOFT_FLOAT
and __MACH__ or __powerpc64__.
From-SVN: r77440
* builtins.c (expand_builtin_signbit): Use extract_bit_field instead
of gen_highpart or gen_lowpart when the floating point format is
wider than the result mode.
Co-Authored-By: Ulrich Weigand <uweigand@de.ibm.com>
From-SVN: r77439
2004-02-06 Ziemowit Laski <zlaski@apple.com>
* objc/objc-act.c (build_super_template) the 'class' field of
'struct _objc_super' shall be named 'super_class' #ifdef OBJCPLUS.
(get_super_receiver): Likewise.
[gcc/libobjc/ChangeLog]
2004-02-06 Ziemowit Laski <zlaski@apple.com>
* objc/objc-api.h (objc_super): The 'class' field shall
be named 'super_class' #ifdef __cplusplus.
From-SVN: r77430
* dwarf2out.c (struct gcc_debug_hooks): Call dwarf2out_begin_function
at the beginning of function, call dwarf2out_var_location for
NOTE_INSN_VAR_LOCATION note.
(struct var_loc_node, struct var_loc_list_def, loclabel_num,
decl_loc_table): New.
(lookup_decl_loc): New function.
(add_var_loc_to_decl): New function.
(based_loc_descr): Added parameter can_use_fbreg, DW_OP_fbreg is used
only if can_use_fbreg.
(mem_loc_descriptor): Added parameter can_use_fbreg, pass it to other
functions.
(loc_descriptor): Likewise. Process VAR_LOCATION.
(concat_loc_descriptor): Call loc_descriptor with can_use_fbreg == true.
(loc_descriptor_from_tree): Call mem_loc_descriptor with
can_use_fbreg == true.
(add_location_or_const_value_attribute): Added parameter enum
dwarf_attribute attr, generate attribute ATTR. Create the location list.
(add_bound_info): Call loc_descriptor with can_use_fbreg == true.
(gen_formal_parameter_die): Call add_location_or_const_value_attribute
with attr == DW_AT_location.
(gen_subprogram_die): Generate the location list for DW_AT_frame_base
if frame_base_decl is defined and has a location list.
(gen_variable_die): Call add_location_or_const_value_attribute with
attr == DW_AT_location.
(dwarf2out_var_location): New function.
(dwarf2out_begin_function): New function.
(dwarf2out_init): Create decl_loc_table.
Co-Authored-By: Josef Zlomek <zlomekj@suse.cz>
From-SVN: r77421
* dwarf2out.c (output_loc_list): Don't use deltas if we have
a separate line info table in use.
Use the correct size for terminators.
(output_die): Use offset, not delta.
From-SVN: r77409
* recog.c (split_all_insns): Do not update reg info.
* regrename.c (regrename_optimize): Likewise.
* toplev.c (rest_of_handle_reorder_blocks): Likewise.
* flow.c (struct propagate_block_info): Add insn_num field.
(reg_deaths): New array.
(life_analysis): Free reg_deaths info.
(allocate_reg_life_data): Allocate reg_deaths array.
(propagate_one_insn): Use new array.
(init_propagate_block): Initialize it.
(free_propagate_block_info): Finish compuation of
REG_LIVE_LENGTH
(attempt_auto_inc): Sanity check that REG_INFO is not
computed at same time.
(mark_used_regs): Update new array.
* reg-stack.c (subst_stack_regs): Unshare clobbers before
substitution.
From-SVN: r77396
2004-02-06 Jeroen Frijters <jeroen@frijters.net>
* java/io/ObjectInputStream.java: Made all calls
to dumpElement[ln] conditional on dump flag. (readObject): Changed to
use cached info from ObjectStreamClass. (readClassDescriptor):
Cache more information in ObjectStreamClass. (processResolution,
readFields): Use cached info from ObjectStreamClass.
(newObject): Throw exception instead of returning null for failure.
(getField, getMethod, callReadMethod, setBooleanField, setByteField,
setCharField, setDoubleField, setFloatField, setIntField,
setLongField, setShortField, setObjectField, readObjectParams):
Removed. (dumpElement, dumpElementln): Removed dump flag condition
check.
* java/io/ObjectStreamField.java (hasReadMethod): Removed.
(setClass): Added call to cacheMethods() (findMethod): New method.
(cacheMethods): New method. (ObjectStreamClass): Added call to
cacheMethods(). (setFields): Cache fields. (getClassUID): Use
AccessController.doPrivileged to invoke setAccessible.
(readObjectMethod, readResolveMethod, realClassIsSerializable,
realClassIsExternalizable, fieldMapping, firstNonSerializableParent):
New fields.
* java/io/ObjectStreamField.java (ObjectStreamField): New constructor.
(ObjectStreamField): Removed FIXME workaround. (getTypeString,
isPrimitive): Made safe for cases where type == null.
(setBooleanField, setByteField, setCharField, setShortField,
setIntField, setLongField, setFloatField, setDoubleField,
setObjectField): New methods.
From-SVN: r77395
* reload1.c (eliminate_regs_in_insn): If a set has a REG_EQUAL
note containing (plus (reg) (const_int)), where reg is an
eliminable reg, then perform the register elimination without
depending on eliminate_regs().
From-SVN: r77378
* config/fr30/fr30-protos.h: Remove the prototype for
fr30_setup_incoming_varargs.
Update the prototypes for fr30_num_arg_regs and
fr30_function_arg_partial_nregs.
* config/fr30/fr30.c (TARGET_STRUCT_VALUE_RTX): New.
(TARGET_SETUP_INCOMING_VARARGS): Likewise.
(fr30_setup_incoming_varargs): Make it static.
Add argument second_time. Don't do anything when second_time
is nonzero.
(fr30_num_arg_regs): Change the type of the first argument to
enum machine_mode.
(fr30_function_arg_partial_nregs): Change the type of the
second argument to enum machine_mode.
* config/fr30/fr30.h (STRUCT_VALUE): Remove.
(SETUP_INCOMING_VARARGS): Remove.
From-SVN: r77375