(finish_decl): Don't do expand_decl_init for FUNCTION_DECL.
(finish_struct): If bit field is of an unsigned
type that promotes to int, promote it unsigned if traditional
or if it is the same size as int.
(start_function): Ditto for function return value.
(finish_function): Test only can_reach_end for the warning
about reaching the end of a non-void function.
(poplevel): If apparently nested inline function has
DECL_ABSTRACT_ORIGIN, don't output it; propagate TREE_ADDRESSABLE.
(pushdecl): When copying inline details into an extern decl,
copy DECL_RESULT, TREE_ASM_WRITTEN. Set DECL_ABSTRACT_ORIGIN.
Jim Wilson [Fri, 7 Aug 1992 02:02:19 +0000 (19:02 -0700)]
(true_dependence): An unchanging read is guaranteed independent of a store only if the store is not unchanging.
(true_dependence): An unchanging read is guaranteed
independent of a store only if the store is not unchanging.
(anti_dependence): Added comment about unchanging reads.
(sched_analyze_2): Don't ignore unchanging reads, they may be
dependent on unchanging writes.
Jeff Law [Thu, 6 Aug 1992 23:23:20 +0000 (17:23 -0600)]
(ASM_FILE_START): If profiling IMPORT "_mcount" instead of
"__gcc_mcount".
(TARGET_SWITCHES): New switch "no-bss" which forces gcc not
use make use of the bss subspace. (For compatability with old
buggy versions of gas.)
(ASM_FILE_START): Add $BSS$ subspace.
(BSS_SECTION_ASM_OP): New macro which tells the assembler to
switch to the bss subspace.
(EXTRA_SECTIONS): Define in_bss as an extra section.
(EXTRA_SECTION_FUNCTIONS): Define "bss_section" function to switch
into the bss subspace.
(ASM_OUTPUT_COMMON): If !TARGET_NO_BSS, then place commons into
the bss subspace.
(ASM_OUTPUT_LOCAL): Likewise.
Richard Kenner [Mon, 3 Aug 1992 01:35:35 +0000 (21:35 -0400)]
(reg_sign_bit_copies): New variable.
(combine_instructions): Initialize it.
(set_significant): Set it.
(try_combine): Set subst_low_cuid immediately before calling `subst' to
the INSN_CUID of the lowest insn involved in the call. Change XOR with
out-of-range constant to (not (xor ...)).
Call both split_insns and find_split_point; pass extra parm to
find_split_point.
Record I2DEST's value if I2 now sets it; similarly for I1DEST.
(find_split_point): Add new arg INSN.
If AND'ing with a large single-bit constant and we only care about
equality with zero, replace with bit extraction.
Make two shifts for ZERO_EXTRACTs unless very narrow.
(subst): Move RESTART label earlier.
If we have a simple operation applied to IF_THEN_ELSE, move the operation
inside the two arms.
(subst, case SUBREG): Use force_to_mode.
(subst, case NOT): Change (not (xor X C)) to (xor X ~C).
(subst, case NEG): Remove (neg (abs X)); redundant.
Convert (neg (xor A 1)) to (plus A -1) if A is known to be 0 or 1.
(subst, case IF_THEN_ELSE): Simplify if an arm contains a register being
tested by substiting the known value.
Put constant integer in last arm if can reverse comparison.
(subst, case SET): Use gen_lowpart_for_combine.
(subst, case AND): Make IF_THEN_ELSE when appropriate.
(subst, case IOR): (ior A C) can sometimes be just C.
(subst, case XOR): Go back and restart when canonicalizing.
(subst, case ABS): Use num_sign_bit_copies.
(make_extraction): Call force_to_mode.
(make_compound_operation): Look at optabs rather that explicitly checking
for operations and assuming we have SImode.
Handle (ashiftrt (OP (ashift foo C1) C3) C2).
(force_to_mode): Only change mode of arithmetic if optab says we have
operation in that mode.
Remove unneeded ASHIFTRT; add handling for IF_THEN_ELSE.
(significant_bits, case NEG): Call num_sign_bit_copies.
(significant_bits, case ABS, case [US]{MIN,MAX}, IF_THEN_ELSE): New.
(num_sign_bit_copies): New function.
(simplify_shift_const): Remove ASHIFTRT if value is known -1 or 0.
Use num_sign_bit_copies to simplify (ashiftrt (ashift ...) ...)
and (ashiftrt (neg ...) ...).
Remove now redundant case when VAROP is a PLUS.
(simplify_comparison): If A is known to be -1 or 0, A != -1 is A == 0.
Simplify unsigned tests that really check the sign bit.
(simplify_comparison, case ASHIFTRT): Convert to LSHIFTRT if equality
comparison with zero.
(get_last_value): Check if the desired register is set in the
insn before the one whose INSN_CUID is subst_low_cuid.
(ASM_OUTPUT_DWARF_STRING): redefinition was incorrect, and uneeded...
(ASM_OUTPUT_DWARF_STRING): redefinition was
incorrect, and uneeded; while Solaris as doesn't support .string, it
does support .asciz, and sparcv4.h takes care of including that definition.
But don't warn if function definition follows a declaration.
(pushdecl): Don't handle it here.
(grokparms): Don't warn about non-prototype decl in system header.
(ASM_OUTPUT_DOUBLE): Use REAL_VALUE_TO_TARGET_DOUBLE to convert.
(ASM_OUTPUT_FLOAT): Use REAL_VALUE_TO_TARGET_SINGLE to convert.
(ASM_OUTPUT_INT): Use ASM_LONG pseudo-op.
(ASM_OUTPUT_SHORT): Use ASM_SHORT pseudo-op.
(ASM_OUTPUT_CHAR): Use ASM_BYTE_OP pseudo-op.
(ASM_OUTPUT_BYTE): Use ASM_BYTE_OP pseudo-op.