From: Stepan D. <stp...@na...> - 2013-06-24 18:19:53
|
The patch. Forgot to attach it. -Stepan. Stepan Dyatkovskiy wrote: > Hi Borja, > > > What happens in your example above when you use a real instruction like >> for example LDD? Does it still use GPR8 regs? To me it's weird that if >> you use a real instruction where operands are clearly defined in the td >> file the instruction selector uses an invalid regclass. > > There are two kinds of inline asm support in LLVM: > 1. You just support all the constraints and pastes inline-asm contents > as-is. That's why its still allowed to use names like "some_instr". > 2. You may expand inline-asm strings set, or in another words just parse > it onto set of instructions. In this case you have to implement > TargetLowering::ExpandInlineAsm method. > I'd want to start it on this week though... > > But first we have to get avr-libc compilable (perhpas I read you > thoughts ;-) ) > > Relative to memory constrains. I implemented initial version it can > catch simplest cases (from test-case): > > @a = internal global i16 0, align 4 > @b = internal global i16 0, align 4 > define void @mem() { > ;CHECK: some_instr Z, Y > call void asm "some_instr $0, $1", "=*Q,=*Q"(i16* @a, i16* @b) > ret void > } > > The patch is attached. > > Its in my todo yet, to handle local variables. They could be emitted as > Y+q expression. Hope to present this support tomorrow. So if 'a' and 'b' > from example above would be local we could get "some_instr Y, Y+2" > > -Stepan. > > |