public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* optimization/10122: Unnecessary move before use of function call return value
@ 2003-03-17 13:36 alga
  0 siblings, 0 replies; only message in thread
From: alga @ 2003-03-17 13:36 UTC (permalink / raw)
  To: gcc-gnats

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 2720 bytes --]


>Number:         10122
>Category:       optimization
>Synopsis:       Unnecessary move before use of function call return value
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          pessimizes-code
>Submitter-Id:   net
>Arrival-Date:   Mon Mar 17 13:36:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Gábor Lóki
>Release:        GCC: (GNU) 3.3 20030303 (prerelease)
>Organization:
>Environment:
BUILD & HOST: Linux 2.4.20 i686 unknown
TARGET: arm-unknown-elf
>Description:
After a function call where the return value is stored in a hard register, GCC moves this value into a soft register. After that if an instruction uses this value, the soft register will be used.
In some cases the optimization algorithms aren't able to recognize that the soft and hard registers which hold the return value are the same. This results in an unnecessary move instruction for each arithmetic instruction that uses the return value. (In some other cases the unnecessary move is optimized out by some of the algorithms.)
In the expamle_1.i attached, in function foo there is an unnecessary move (mov r2,r0). In the example_2.i attached, in function foo there is an unnecessary move (mov r3,r0).
>How-To-Repeat:
arm-elf-gcc -S -g0 -Os example_1.i
arm-elf-gcc -S -g0 -Os example_2.i

--- example_1: ---
int bongo(int);
int j;
int foo()
{
  j=bongo(44);
  return bongo(35);
} 

--- example_2: ---
int bongo(int);
int bar();
void foo()
{
  if(bar())
    bongo(44);
}
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-compressed; name="function-call-return-value.tgz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="function-call-return-value.tgz"

H4sICBLHdT4AAGZ1bmN0aW9uLWNhbGwtcmV0dXJuLXZhbHVlLnRhcgDtlVFr2zAQx/sqw77DLWGQ
gG1kyXahW8egD30p28PY0xhFtuWgYMuebHftSr/7JNlZ3K4jrCwpY/6/+O50p7OV/E6Ks6zkR3sV
xjgOQ3gsbhUE+AgfxzSiIaVRaOJRHOnYfl+rV9e0TMGvL/efiKnS40XurdIUvI/grTB4Hxrg16ys
C34Z+OKFsyOHmJzn/o5JT9Poh95bj138E0J+8k+OY5sfkXDi/wCaQwCz7Z8gnTk28ibpRNF6Qr7d
BNKqLJnMoBCSb4L36oRsIankqlpoa/na+uv+kVfVYuncOgDr0z4lDHUGgOJtp+RQRiMdu5smyUE1
GuJ767GT/+B4xD8Z+I8m/g+gexyTJ/JPfsd/wtRCm1eVyEZDQOQLu7DUNsBoIEzwH1zbEd7srccu
/uM43vIfDfyH0/1/CCE/FwVH969y5Lf8utUPVoiVRERbq6JKWIE0xGb1pubGdOFV3sm0FZV0tHvi
oHfA1KqBU8Au1Pp253piWCdXrOTGNDnWuZScZ9wsBy50DW8umazkTVl12ho2cVBZXSFRu9DUDmra
Ms9QU7904TbXMRMvlG6U3vWJSjeah6HO7BK0yZhrPymQHTMOKjKFFHXBvyBDDXFB4VE9jUwnZRc+
m9Q5/mLqSs7snrZ1Y1vrtsmwsX9BT0YHprc37rdKZWitjUZ8H07M9/ozNPMUrV0IXaDmgEXGZYtm
52dnJ7A4f/9pCdSnQDCmmAYYFvo0FS84a/hy9hfH5HaEPyP/OBjxH/b804n/Q+gh/+Rf5f8x5Jka
uKY942lZo57oB/PC0P31Id92213cP4b2M6E8adIf6weKmgyiABYAAA==


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-03-17 13:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-17 13:36 optimization/10122: Unnecessary move before use of function call return value alga

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).