Description
Bugzilla Link | 52215 |
Version | 12.0 |
OS | other |
Extended Description
E.g. the avr-libc but also other AVR code written for gcc-avr heavily uses the following aliases:
tmp_reg
SREG
zero_reg
SP_H
SP_L
also the aliases RAMPZ and EIND are occasionally used.
See [1] for their definitions.
This is the first time I looked into the LLVM source code, so I might be talking nonsense here. I tried to fix this by amending lib/Target/AVR/AVRRegisterInfo.td like this:
-def R0 : AVRReg<0, "r0">, DwarfRegNum<[0]>;
-def R1 : AVRReg<1, "r1">, DwarfRegNum<[1]>;
+def R0 : AVRReg<0, "r0", [], ["tmp_reg"]>, DwarfRegNum<[0]>;
+def R1 : AVRReg<1, "r1", [], ["zero_reg"]>, DwarfRegNum<[1]>;
etc. - but to no avail.
I also tried to just emit assignments for the alias via void AVRAsmPrinter::emitStartOfAsmFile(Module &M)
, but this didn't work for me either.
I think that adding the aliases should be relatively trivial for someone with same basic understanding of the LLVM code - which I sadly lack.
Also note that according to [1] the AVRtiny family has a different mapping (e.g. tmp_reg usually is r0, but on AVRtiny it is r16).