public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "pinskia at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug target/109903] Register misallocation in hand-crafted asm insn, no diagnostics produced Date: Thu, 18 May 2023 15:50:06 +0000 [thread overview] Message-ID: <bug-109903-4-UQ5jnQU5hz@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-109903-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109903 --- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Dimitri Gorokhovik from comment #4) > Hi Andrew, > > I'd agree more with "WONTFIX" here ;-) We are not looking for solution. We > want to spare the same hassle to others. Why you didn't read the documentation which is documents inline-asm. And there is no way for GCC to know what you mean. > > This asm doesn't write to memory, it doesn't even read any -- 'a' is passed > over in the registers with aarch64 and x64_86. Oh I read the instruction wrong. > > It is also very hard to see the need for early clobber here ... how comes > the version with return value doesn't need it while the other does? The asm > performs regular register loads. Certainly we are not marking all register > loads with early clobbers are we? The easy and fast rule is simple. If you write to an output operand before read from an input operand, that output operand needs an early clobber. This is how I knew what the issue was right away without even looking further into what was going wrong. Even the documentation is clear here: "Means (in a particular alternative) that this operand is an earlyclobber operand, which is written before the instruction is finished using the input operands." The reason why sometimes it works sometimes it does not work is depedent on the register allocator. In the case of return and first argument registers, well usually those are the same register so the register allocator wants to minimalize the number of spills and/or register moves. > > WE ended up moving 'a' to output clause, it feels barely more contorted than > the early-clobber method. That is actually WRONG and will produce wrong code in some cases. The early clobber is the right appoarch here if you are writing to an operand before you use all of the input operands (again this is all DOCUMENTED and has been for the over 10 years now). > > > GCC does not look at the inline-asm template except while outputting the assembly. > Yep, reason why I let it emit ARMv8 insns for the x64_86 target ;-)
next prev parent reply other threads:[~2023-05-18 15:50 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-05-18 14:59 [Bug target/109903] New: " dimitri.gorokhovik at free dot fr 2023-05-18 15:02 ` [Bug target/109903] " pinskia at gcc dot gnu.org 2023-05-18 15:04 ` pinskia at gcc dot gnu.org 2023-05-18 15:05 ` pinskia at gcc dot gnu.org 2023-05-18 15:28 ` dimitri.gorokhovik at free dot fr 2023-05-18 15:50 ` pinskia at gcc dot gnu.org [this message] 2023-05-18 16:09 ` dimitri.gorokhovik at free dot fr
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-109903-4-UQ5jnQU5hz@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).