This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Help: Function prologue: mov vs push instruction
- From: CJ <c dot jaiprakash at gmail dot com>
- To: gcc-help at gcc dot gnu dot org
- Date: Thu, 20 Nov 2014 18:17:03 +0530
- Subject: Help: Function prologue: mov vs push instruction
- Authentication-results: sourceware.org; auth=none
Hi,
I am analyzing some performance issue and see that the push
instruction in function prologue taking long CPU time. I noticed with
4.4.3 compiler I used to see mov instruction where as in 4.8.3
compiler I am seeing push instructions in prologue. Can anyone please
let me know what decides which instructions to use?
I see below prologue RTL in 4.4.3,
(insn/f 98 12 99 2 stphjin.c:913 (set (mem:DI (plus:DI (reg/f:DI 7 sp)
(const_int -48 [0xffffffffffffffd0])) [0 S8 A8])
(reg:DI 3 bx)) -1 (nil))
(insn/f 99 98 100 2 stphjin.c:913 (set (mem:DI (plus:DI (reg/f:DI 7 sp)
(const_int -40 [0xffffffffffffffd8])) [0 S8 A8])
(reg:DI 6 bp)) -1 (nil))
(insn/f 100 99 101 2 stphjin.c:913 (set (mem:DI (plus:DI (reg/f:DI 7 sp)
(const_int -32 [0xffffffffffffffe0])) [0 S8 A8])
(reg:DI 41 r12)) -1 (nil))
(insn/f 101 100 102 2 stphjin.c:913 (set (mem:DI (plus:DI (reg/f:DI 7 sp)
(const_int -24 [0xffffffffffffffe8])) [0 S8 A8])
(reg:DI 42 r13)) -1 (nil))
(insn/f 102 101 103 2 stphjin.c:913 (set (mem:DI (plus:DI (reg/f:DI 7 sp)
(const_int -16 [0xfffffffffffffff0])) [0 S8 A8])
(reg:DI 43 r14)) -1 (nil))
(insn/f 103 102 104 2 stphjin.c:913 (set (mem:DI (plus:DI (reg/f:DI 7 sp)
(const_int -8 [0xfffffffffffffff8])) [0 S8 A8])
(reg:DI 44 r15)) -1 (nil))
(insn/f 104 103 105 2 stphjin.c:913 (parallel [
(set (reg/f:DI 7 sp)
(plus:DI (reg/f:DI 7 sp)
(const_int -56 [0xffffffffffffffc8])))
(clobber (reg:CC 17 flags))
(clobber (mem:BLK (scratch) [0 A8]))
]) -1 (nil))
Where as in 4.8.3 the prologue RTL is as below
(note 12 1 101 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn/f 101 12 102 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8])
(reg:DI 44 r15)) stphjin.c:1039 -1
(nil))
(insn/f 102 101 103 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8])
(reg:DI 43 r14)) stphjin.c:1039 -1
(nil))
(insn/f 103 102 104 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8])
(reg:DI 42 r13)) stphjin.c:1039 -1
(nil))
(insn/f 104 103 105 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8])
(reg:DI 41 r12)) stphjin.c:1039 -1
(nil))
(insn/f 105 104 106 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8])
(reg:DI 6 bp)) stphjin.c:1039 -1
(nil))
(insn/f 106 105 107 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8])
(reg:DI 3 bx)) stphjin.c:1039 -1
(nil))
(insn/f 107 106 108 2 (parallel [
(set (reg/f:DI 7 sp)
(plus:DI (reg/f:DI 7 sp)
(const_int -24 [0xffffffffffffffe8])))
(clobber (reg:CC 17 flags))
(clobber (mem:BLK (scratch) [0 A8]))
]) stphjin.c:1039 -1
(expr_list:REG_CFA_ADJUST_CFA (set (reg/f:DI 7 sp)
(plus:DI (reg/f:DI 7 sp)
(const_int -24 [0xffffffffffffffe8])))
(nil)))
(note 108 107 2 2 NOTE_INSN_PROLOGUE_END)
Thanks and Best Regards,
C Jaiprakash