https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86673
--- Comment #8 from Thomas Preud'homme <thopre01 at gcc dot gnu.org> --- (In reply to Thomas Preud'homme from comment #7) > (In reply to Thomas Preud'homme from comment #6) > > The following simpler testcase also shows the problem: > > > > void fn1() { > > register const int h asm("r2") = 1; > > __asm__(".ifnc %0,r2; .err; .endif\n\t" > > "bl __put_user_4" :: "r"(h)); > > } > > The register label gets optimized during gimple stages. Dump for original already shows propagation of the constant has happened which later lead to the removal of the register declaration: ;; Function fn1 (null) ;; enabled by -tree-original { register const int h __asm__ (*r2) = 1; register const int h __asm__ (*r2) = 1; __asm__ __volatile__(".ifnc %0,r2; .err; .endif\n\tbl\t__put_user_4"::"r" 1); }