This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
some seemingly redundant register uses in nios gcc compiled assembly code
- From: Liu Haibin <liu dot haibin at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Wed, 7 Sep 2005 12:35:53 +0800
- Subject: some seemingly redundant register uses in nios gcc compiled assembly code
Hi,
I compiled the following code using nios gcc -da -O3 (gcc version 3.3.3)
#include <math.h>
#define PI (4*atan(1))
double rad2deg(double rad)
{
return (180.0 * rad / (PI));
}
In .s file, it has some codes like this
........
mov r4, zero
movhi r5, %hiadj(1072693248)
addi r5, r5, %lo(1072693248)
mov r16, r2
mov r17, r3
call atan
mov r5, r3
mov r4, r2
mov r6, zero
movhi r7, %hiadj(1074790400)
addi r7, r7, %lo(1074790400)
call __muldf3
mov r10, r2
mov r5, r17
mov r6, r10
mov r7, r3
mov r4, r16
............
In .c.26.flow2 file,
(call_insn 23 19 28 0 0x0 (parallel [
(set (reg:DF 2 r2)
(call (mem:QI (symbol_ref:SI ("atan")) [0 S1 A8])
(const_int 0 [0x0])))
(clobber (reg:SI 31 ra))
]) 44 {*call_value} (insn_list 21 (nil))
(expr_list:REG_DEAD (reg:DF 4 r4)
(expr_list:REG_UNUSED (reg:SI 31 ra)
(nil)))
(expr_list (use (reg:DF 4 r4))
(nil)))
.....
(call_insn/u 31 30 36 0 0x0 (parallel [
(set (reg:DF 2 r2)
(call (mem:QI (symbol_ref:SI ("__muldf3")) [0 S1 A8])
(const_int 0 [0x0])))
(clobber (reg:SI 31 ra))
]) 44 {*call_value} (insn_list 27 (insn_list 29 (nil)))
(expr_list:REG_DEAD (reg:DF 4 r4)
(expr_list:REG_DEAD (reg:DF 6 r6)
(expr_list:REG_UNUSED (reg:SI 31 ra)
(expr_list:REG_EH_REGION (const_int -1 [0xffffffff])
(nil)))))
(expr_list (use (reg:DF 6 r6))
(expr_list (use (reg:DF 4 r4))
(nil))))
>From the RTL we can see that these two calls don't use r5, but why
here both assembly codes and rtl have some codes with r5, like
movhi r5, %hiadj(1072693248)
addi r5, r5, %lo(1072693248) (move 32-bit constant into register)
and
mov r5, r3
In nios2, r2 and r3 are for return value. r4, r5, r6, r7 are for
registre auruments
Does the following rtl implicitly indicate that r5 is used?
(expr_list (use (reg:DF 6 r6))
(expr_list (use (reg:DF 4 r4))
Thanks.
Regards,
Haibin