Commit 0e2eaba4 by Geoff Keating Committed by Geoffrey Keating

haifa-sched.c (schedule_block): Explain the real reason we delete REG_SAVE_NOTEs…

haifa-sched.c (schedule_block): Explain the real reason we delete REG_SAVE_NOTEs on the first insn of a block.

* haifa-sched.c (schedule_block): Explain the real reason
we delete REG_SAVE_NOTEs on the first insn of a block.
Don't delete REG_SAVE_NOTES for NOTE_INSN_SETJMP.

* compile/20000224-1.c: New test.

From-SVN: r32150
parent 66830bb2
2000-02-25 Geoff Keating <geoffk@cygnus.com>
* haifa-sched.c (schedule_block): Explain the real reason
we delete REG_SAVE_NOTEs on the first insn of a block.
Don't delete REG_SAVE_NOTES for NOTE_INSN_SETJMP.
2000-02-24 Mark Mitchell <mark@codesourcery.com>
* input.h (push_srcloc): New function.
......
......@@ -5744,22 +5744,31 @@ schedule_block (bb, rgn_n_insns)
had different notions of what the "head" insn was. */
get_bb_head_tail (bb, &head, &tail);
/* Interblock scheduling could have moved the original head insn from this
block into a proceeding block. This may also cause schedule_block and
compute_forward_dependences to have different notions of what the
"head" insn was.
If the interblock movement happened to make this block start with
some notes (LOOP, EH or SETJMP) before the first real insn, then
HEAD will have various special notes attached to it which must be
removed so that we don't end up with extra copies of the notes. */
/* rm_other_notes only removes notes which are _inside_ the
block---that is, it won't remove notes before the first real insn
or after the last real insn of the block. So if the first insn
has a REG_SAVE_NOTE which would otherwise be emitted before the
insn, it is redundant with the note before the start of the
block, and so we have to take it out.
FIXME: Probably the same thing should be done with REG_SAVE_NOTEs
referencing NOTE_INSN_SETJMP at the end of the block. */
if (GET_RTX_CLASS (GET_CODE (head)) == 'i')
{
rtx note;
for (note = REG_NOTES (head); note; note = XEXP (note, 1))
if (REG_NOTE_KIND (note) == REG_SAVE_NOTE)
remove_note (head, note);
{
if (INTVAL (XEXP (note, 0)) != NOTE_INSN_SETJMP)
{
remove_note (head, note);
note = XEXP (note, 1);
remove_note (head, note);
}
else
note = XEXP (note, 1);
}
}
next_tail = NEXT_INSN (tail);
......
2000-02-25 Geoff Keating <geoffk@cygnus.com>
* compile/20000224-1.c: New test.
2000-02-25 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
* compile/cpp-2.c: New test.
......
enum Lisp_Type
{
Lisp_Int
,Lisp_Record
,Lisp_Cons
,Lisp_String
,Lisp_Vector
,Lisp_Symbol
,Lisp_Char
};
typedef
union Lisp_Object
{
struct
{
enum Lisp_Type type: 3L ;
unsigned long markbit: 1;
unsigned long val: 60;
} gu;
long i;
}
Lisp_Object;
extern int initialized;
void
init_device_faces (int *d)
{
if (initialized)
{
Lisp_Object tdevice;
do {
tdevice = (union Lisp_Object)
{ gu:
{ markbit: 0,
type: Lisp_Record,
val: ((unsigned long )d)
}
};
} while (0);
call_critical_lisp_code (tdevice);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment