+2009-02-10 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/39118
+ * config/i386/i386.c (expand_prologue): Emit blockage at the end
+ of function prologue when frame pointer is used to access
+ red zone area.
+
2009-02-10 Richard Guenther <rguenther@suse.de>
PR middle-end/39127
2009-02-06 Nick Clifton <nickc@redhat.com>
- * config/m32c/m32c.h (PCC_BITFIELD_TYPE_MATTERS): Define to
- zero.
+ * config/m32c/m32c.h (PCC_BITFIELD_TYPE_MATTERS): Define to zero.
2009-02-06 Paolo Bonzini <bonzini@gnu.org>
2009-02-02 Catherine Moore <clm@codesourcery.com>
- * sde.h (SUBTARGET_ARM_SPEC): Don;t assemble -fpic code as -mabicalls.
+ * sde.h (SUBTARGET_ARM_SPEC): Don't assemble -fpic code as -mabicalls.
2009-02-02 Richard Sandiford <rdsandiford@googlemail.com>
* regclass.c: Rename reginfo.c. Change file description.
(FORBIDDEN_INC_DEC_CLASSES): Remove.
- (reg_class_superclasses, forbidden_inc_dec_class, in_inc_dec):
- Remove.
+ (reg_class_superclasses, forbidden_inc_dec_class, in_inc_dec): Remove.
(init_reg_sets_1): Remove code for evaluation of
reg_class_superclasses and losing_caller_save_reg_set.
(init_regs): Remove init_reg_autoinc.
2009-01-28 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/38740
- * reorg.c (gate_handle_delay_slots): Avoid dbr scheduling
- if !optimize.
+ * reorg.c (gate_handle_delay_slots): Avoid dbr scheduling if !optimize.
* config/mips/mips.c (mips_reorg): Likewise.
2009-01-28 Richard Guenther <rguenther@suse.de>
{
rtx insn;
bool pic_reg_used;
+ bool emit_blockage = false;
struct ix86_frame frame;
HOST_WIDE_INT allocate;
{
if (pic_reg_used)
emit_insn (gen_prologue_use (pic_offset_table_rtx));
- emit_insn (gen_blockage ());
+ emit_blockage = true;
}
if (crtl->drap_reg && !crtl->stack_realign_needed)
insn = emit_insn (gen_rtx_SET (VOIDmode, crtl->drap_reg, x));
}
+ /* Prevent instructions from being scheduled into register save push
+ sequence when access to the redzone area is done through frame pointer.
+ The offset betweeh the frame pointer and the stack pointer is calculated
+ relative to the value of the stack pointer at the end of the function
+ prologue, and moving instructions that access redzone area via frame
+ pointer inside push sequence violates this assumption. */
+ if (frame_pointer_needed && frame.red_zone_size)
+ emit_blockage = true;
+
+ if (emit_blockage)
+ emit_insn (gen_blockage ());
+
/* Emit cld instruction if stringops are used in the function. */
if (TARGET_CLD && ix86_current_function_needs_cld)
emit_insn (gen_cld ());