https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92346

--- Comment #4 from wierton <141242068 at smail dot nju.edu.cn> ---
(In reply to Andrew Pinski from comment #3)
> (In reply to wierton from comment #2)
> > This code can reproduce the phenomenon and there are no output constraints.
> > I do understand that the declaration %eax in eax is conflict with the inline
> > assembly clobber list, but in compiler such as clang, this dependency will
> > be detected and clang will extraly generate a move instruction to save the
> > eax and the resume it. I think gcc is a mostly widely used compiler, we as
> > users expect this compiler becomes better and better, and this feature will
> > help improve the usability, so I post it here. Very sorry for previous post.
> 
> And the documentation is clear there that this is expected behavior.
> 
> https://gcc.gnu.org/onlinedocs/gcc-9.2.0/gcc/Local-Register-Variables.
> html#Local-Register-Variables
> 
> "The only supported use for this feature is to specify registers for input
> and output operands when calling Extended asm (see Extended Asm)."
> 
> "Defining a register variable does not reserve the register. Other than when
> invoking the Extended asm, the contents of the specified register are not
> guaranteed. For this reason, the following uses are explicitly not
> supported. If they appear to work, it is only happenstance, and may stop
> working as intended due to (seemingly) unrelated changes in surrounding
> code, or even minor changes in the optimization of a future version of gcc:"

Thanks very much for your patience to explain to me, I feel very very sorry for
taking your time on such meaningless thing. I will be more cautious before any
further possible post.

Reply via email to