public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <20030219170600.9760.beszedes@rgai.hu> @ 2003-05-26 20:02 ` dhazeghi@yahoo.com 2003-05-26 20:18 ` pinskia@physics.uc.edu ` (3 subsequent siblings) 4 siblings, 0 replies; 10+ messages in thread From: dhazeghi@yahoo.com @ 2003-05-26 20:02 UTC (permalink / raw) To: gcc-bugs PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 ------- Additional Comments From dhazeghi@yahoo.com 2003-05-26 19:49 ------- Hello, with gcc 3.3 I get the following code: .file "01.i" .text .align 2 .global func .type func, %function func: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. @ lr needed for prologue mov pc, lr .size func, .-func .align 2 .global foo .type foo, %function foo: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {r4, fp, ip, lr, pc} mov r1, r0, lsr #24 sub fp, ip, #4 mov r4, r0 mov r0, #8 bl func mov r1, r4, asr #16 and r1, r1, #255 mov r0, #8 bl func mov r4, r4, asr #8 and r4, r4, #255 mov r1, r4 mov r0, #8 ldmea fp, {r4, fp, sp, lr} b func .size foo, .-foo .ident "GCC: (GNU) 3.3 20030508 (prerelease)" with mainline, I get this slightly different code: .file "01.i" .text .align 2 .global func .type func, %function func: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. @ lr needed for prologue mov pc, lr .size func, .-func .align 2 .global foo .type foo, %function foo: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {r4, fp, ip, lr, pc} mov r1, r0, lsr #24 sub fp, ip, #4 mov r4, r0 mov r0, #8 bl func mov r1, r4, lsr #16 and r1, r1, #255 mov r0, #8 bl func mov r4, r4, lsr #8 and r1, r4, #255 mov r0, #8 ldmea fp, {r4, fp, sp, lr} b func .size foo, .-foo .ident "GCC: (GNU) 3.4 20030508 (experimental)" Is this an improvement from the code you saw (sorry, I don't know arm asm, and there are too many changes from the .s file you provided just to do a diff)? Thanks, Dara ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <20030219170600.9760.beszedes@rgai.hu> 2003-05-26 20:02 ` [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register dhazeghi@yahoo.com @ 2003-05-26 20:18 ` pinskia@physics.uc.edu 2003-06-02 1:18 ` pinskia@physics.uc.edu ` (2 subsequent siblings) 4 siblings, 0 replies; 10+ messages in thread From: pinskia@physics.uc.edu @ 2003-05-26 20:18 UTC (permalink / raw) To: gcc-bugs PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 pinskia@physics.uc.edu changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |WAITING ------- Additional Comments From pinskia@physics.uc.edu 2003-05-26 20:09 ------- See Dara's question. ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <20030219170600.9760.beszedes@rgai.hu> 2003-05-26 20:02 ` [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register dhazeghi@yahoo.com 2003-05-26 20:18 ` pinskia@physics.uc.edu @ 2003-06-02 1:18 ` pinskia@physics.uc.edu 2003-08-14 3:19 ` pinskia at gcc dot gnu dot org 2004-08-20 6:42 ` pinskia at gcc dot gnu dot org 4 siblings, 0 replies; 10+ messages in thread From: pinskia@physics.uc.edu @ 2003-06-02 1:18 UTC (permalink / raw) To: gcc-bugs PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 pinskia@physics.uc.edu changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |NEW Ever Confirmed| |1 Last reconfirmed|0000-00-00 00:00:00 |2003-06-02 01:18:46 date| | ------- Additional Comments From pinskia@physics.uc.edu 2003-06-02 01:18 ------- According to the submitter the problem still exists. ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <20030219170600.9760.beszedes@rgai.hu> ` (2 preceding siblings ...) 2003-06-02 1:18 ` pinskia@physics.uc.edu @ 2003-08-14 3:19 ` pinskia at gcc dot gnu dot org 2004-08-20 6:42 ` pinskia at gcc dot gnu dot org 4 siblings, 0 replies; 10+ messages in thread From: pinskia at gcc dot gnu dot org @ 2003-08-14 3:19 UTC (permalink / raw) To: gcc-bugs PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |enhancement ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <20030219170600.9760.beszedes@rgai.hu> ` (3 preceding siblings ...) 2003-08-14 3:19 ` pinskia at gcc dot gnu dot org @ 2004-08-20 6:42 ` pinskia at gcc dot gnu dot org 4 siblings, 0 replies; 10+ messages in thread From: pinskia at gcc dot gnu dot org @ 2004-08-20 6:42 UTC (permalink / raw) To: gcc-bugs ------- Additional Comments From pinskia at gcc dot gnu dot org 2004-08-20 06:42 ------- Note to reproduce this on the mainline you have remove the definition of the function func because func is really a pure function and we remove the call to the function and the rest of the foo is really dead code. -- What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2004-05-21 03:44:10 |2004-08-20 06:42:58 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 ^ permalink raw reply [flat|nested] 10+ messages in thread
[parent not found: <bug-9760-5458@http.gcc.gnu.org/bugzilla/>]
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <bug-9760-5458@http.gcc.gnu.org/bugzilla/> @ 2009-03-12 18:45 ` ramana dot r at gmail dot com 2010-02-08 16:11 ` steven at gcc dot gnu dot org ` (2 subsequent siblings) 3 siblings, 0 replies; 10+ messages in thread From: ramana dot r at gmail dot com @ 2009-03-12 18:45 UTC (permalink / raw) To: gcc-bugs ------- Comment #6 from ramana dot r at gmail dot com 2009-03-12 18:45 ------- With Mainline today gcc produces : stmfd sp!, {r4, lr} mov r1, r0, lsr #24 mov r4, r0 mov r0, #8 bl func mov r1, r4, lsr #16 and r1, r1, #255 mov r0, #8 bl func mov r1, r4, lsr #8 and r1, r1, #255 mov r0, #8 ldmfd sp!, {r4, lr} b func The problem still exists. This can't be a problem with the combiner because the combine would stop at function call boundaries. -- ramana dot r at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rearnsha at arm dot com, | |ramana dot r at gmail dot | |com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <bug-9760-5458@http.gcc.gnu.org/bugzilla/> 2009-03-12 18:45 ` ramana dot r at gmail dot com @ 2010-02-08 16:11 ` steven at gcc dot gnu dot org 2010-02-08 16:30 ` rearnsha at arm dot com 2010-02-08 16:31 ` rearnsha at arm dot com 3 siblings, 0 replies; 10+ messages in thread From: steven at gcc dot gnu dot org @ 2010-02-08 16:11 UTC (permalink / raw) To: gcc-bugs ------- Comment #7 from steven at gcc dot gnu dot org 2010-02-08 16:11 ------- New test case is with func defined extern, as already mentioned in comment #5: extern void func(char c, int t); void foo(int u) { func ( 8, (u >> 24) & 0xffL ); func ( 8, (u >> 16) & 0xffL ); func ( 8, (u >> 8) & 0xffL ); } Trunk today (r156595) produces this: stmfd sp!, {r4, lr} mov r4, r0 mov r1, r4, lsr #24 mov r0, #8 bl func mov r1, r4, lsr #16 mov r0, #8 and r1, r1, #255 bl func mov r1, r4, lsr #8 mov r0, #8 and r1, r1, #255 ldmfd sp!, {r4, lr} b func Can someone please explain what the expected code is? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <bug-9760-5458@http.gcc.gnu.org/bugzilla/> 2009-03-12 18:45 ` ramana dot r at gmail dot com 2010-02-08 16:11 ` steven at gcc dot gnu dot org @ 2010-02-08 16:30 ` rearnsha at arm dot com 2010-02-08 16:31 ` rearnsha at arm dot com 3 siblings, 0 replies; 10+ messages in thread From: rearnsha at arm dot com @ 2010-02-08 16:30 UTC (permalink / raw) To: gcc-bugs ------- Comment #8 from rearnsha at arm dot com 2010-02-08 16:30 ------- Subject: Re: [arm] Combine cannot do its job because immediate operand is used instead of register On Mon, 2010-02-08 at 16:11 +0000, steven at gcc dot gnu dot org wrote: > Can someone please explain what the expected code is? Something like stmfd sp!, {r3, r4, r5, lr} mov r4, r0 mov r5, #255 mov r1, r4, lsr #24 mov r0, #8 bl func and r1, r5, r4, lsr #16 mov r0, #8 bl func mov r1, r5, r4, lsr #8 mov r0, #8 ldmfd sp!, {r3, r4, r5, lr} b func By putting 255 into a register we add one instruction, but remove 2; so save one overall. This is one of the rare cases where an immediate is actually more expensive on ARM than using a register. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <bug-9760-5458@http.gcc.gnu.org/bugzilla/> ` (2 preceding siblings ...) 2010-02-08 16:30 ` rearnsha at arm dot com @ 2010-02-08 16:31 ` rearnsha at arm dot com 3 siblings, 0 replies; 10+ messages in thread From: rearnsha at arm dot com @ 2010-02-08 16:31 UTC (permalink / raw) To: gcc-bugs ------- Comment #9 from rearnsha at arm dot com 2010-02-08 16:31 ------- Subject: Re: [arm] Combine cannot do its job because immediate operand is used instead of register On Mon, 2010-02-08 at 16:30 +0000, rearnsha at arm dot com wrote: > mov r1, r5, r4, lsr #8 > Should, of course, be AND. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 ^ permalink raw reply [flat|nested] 10+ messages in thread
[parent not found: <bug-9760-4@http.gcc.gnu.org/bugzilla/>]
* [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register [not found] <bug-9760-4@http.gcc.gnu.org/bugzilla/> @ 2021-07-26 7:29 ` pinskia at gcc dot gnu.org 0 siblings, 0 replies; 10+ messages in thread From: pinskia at gcc dot gnu.org @ 2021-07-26 7:29 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=9760 --- Comment #10 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Still happens on the trunk. Note armv7-a produces reasonable code though as it uses ubfx which is new for armv7-a: push {r4, lr} mov r4, r0 movs r0, #8 lsrs r1, r4, #24 bl func ubfx r1, r4, #16, #8 movs r0, #8 bl func ubfx r1, r4, #8, #8 movs r0, #8 pop {r4, lr} b func ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-07-26 7:29 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20030219170600.9760.beszedes@rgai.hu> 2003-05-26 20:02 ` [Bug target/9760] [arm] Combine cannot do its job because immediate operand is used instead of register dhazeghi@yahoo.com 2003-05-26 20:18 ` pinskia@physics.uc.edu 2003-06-02 1:18 ` pinskia@physics.uc.edu 2003-08-14 3:19 ` pinskia at gcc dot gnu dot org 2004-08-20 6:42 ` pinskia at gcc dot gnu dot org [not found] <bug-9760-5458@http.gcc.gnu.org/bugzilla/> 2009-03-12 18:45 ` ramana dot r at gmail dot com 2010-02-08 16:11 ` steven at gcc dot gnu dot org 2010-02-08 16:30 ` rearnsha at arm dot com 2010-02-08 16:31 ` rearnsha at arm dot com [not found] <bug-9760-4@http.gcc.gnu.org/bugzilla/> 2021-07-26 7:29 ` pinskia at gcc dot gnu.org
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).