define void @foo() {
  %1 = call i32 asm sideeffect "", "={x0},0"(i32 435)
  ret void
}With llc -march=aarch64 -O0, this generates the following assembly.
foo:                                    // @foo
	.cfi_startproc
// %bb.0:
	mov	w8, #435
	mrs	x0, NZCV
	//APP
	//NO_APP
	ret
Using ={x0},{x0} instead of ={x0},0 seems to avoid this issue,
This IR is generated by rustc's inline assembly for an inout("x8") operand, so perhaps this is rustc's fault?
Actually I can reproduce this bug in Clang as well, so it's definitely not an issue that is unique to rustc.
void foo() {
    register int x asm("x8") = 435;
    asm volatile("" : "+&r" (x));
}