or1k: Fix issue with set_got clobbering LR (r9)
authorStafford Horne <shorne@gmail.com>
Sat, 31 Aug 2019 06:00:56 +0000 (06:00 +0000)
committerStafford Horne <shorne@gcc.gnu.org>
Sat, 31 Aug 2019 06:00:56 +0000 (06:00 +0000)
commitfd631eb5a7597a7040f770b2a912cec13af50df4
tree29306617e9d66d1e5b92c3832c3ab9d2e5d7a0f0
parent3ba155dd1921b55f04866b35a2e054e092670cd6
or1k: Fix issue with set_got clobbering LR (r9)

When compiling glibc we found that the GOT register was being allocated
r9 when the instruction was still set_got_tmp.  That is a problem
because r9 is the Link Register (LR) in OpenRISC which is used/clobbered
in set_got.  We cannot use r9 as the GOT register.  Also, we cannot
simply say set_got_tmp clobbers r9 as this is the reason for having the
temporary set_got_tmp.

Fix by using a register class constraint that does not allow r9 during
register allocation.

gcc/ChangeLog:

        * config/or1k/constraints.md (t): New constraint.
        * config/or1k/or1k.h (GOT_REGS): New register class.
        * config/or1k/or1k.md (set_got_tmp, set_got): Use t contraint.

From-SVN: r275242
gcc/ChangeLog
gcc/config/or1k/constraints.md
gcc/config/or1k/or1k.h
gcc/config/or1k/or1k.md