From: Borja F. <bor...@gm...> - 2013-06-20 00:10:05
|
Stepan thanks for the commit! I've done some post commit style fixes and fix a possible crash with a dyn_cast. I have two further questions after reviewing your code more thoroughly: 1) for the M constraint you expand the type to MVT::i16 in case the value is negative. I dont understand the need to do this. 2) did you manage to understand how the G constraint works? I see you return a 0 MVT::i8 constant, but floats are 32 bits so how does this really work. 2013/6/18 Borja Ferrer <bor...@gm...> > Sure Stepan, go ahead. I can do any post commit cleanups afterwards. > > > 2013/6/17 John Myers <ato...@gm...> > >> You should have commit access. >> >> >> On Mon, Jun 17, 2013 at 1:35 PM, Stepan Dyatkovskiy <stp...@na...>wrote: >> >>> Hi Borja, >>> >>> 2.1: >>> You're right. Will return C_Register. >>> About Q, I'd want to learn a bit more before it would be implemented. >>> Perhaps there is nothing special, but I'd want to check. >>> >>> 2.2. Yes, we can return cw_constant. I had used ARM template :-) They >>> just had set it as cw_other :-) >>> >>> 3. avr-llvm has appeared in "My Projects" in source forge menu. Does it >>> mean I have permissions already? Can I do test commit (one more \n in >>> README)? >>> >>> 4. I propose to commit everything (with fixes you proposed) to avoid >>> growing snow ball patch ;-) >>> >>> -- >>> Truly yours, >>> Stepan Dyatkovskiy >>> >>> >>> 17.06.2013, 22:50, "Borja Ferrer" <bor...@gm...>: >>> >>> Ok thanks for the fixes, more things: >>> >>> 2.1) AVRTargetLowering::getConstraintType: Looking at other backends, I >>> think the x, y, z, t constraints should return C_Register instead of >>> C_RegisterClass since these are used for specific regs inside a regclass. >>> Probably the same for the q one. What do you think? >>> >>> 2.2) Ok, so you've given the largest weight to the bigger regclasses d, >>> r, l and then for the other reg constraints the smaller weight, I agree >>> then. >>> Now, for the constant constraints you should return CW_Constant instead, >>> other backends first check that the imm val is in range and if it is then >>> set it to that value, this is taken from the x86 one: >>> case 'K': >>> if (ConstantInt *C = dyn_cast<ConstantInt>(CallOperandVal)) { >>> if ((C->getSExtValue() >= -0x80) && (C->getSExtValue() <= 0x7f)) >>> weight = CW_Constant; >>> } >>> break; >>> Finally for Q we should return CW_Memory no? >>> >>> 2.3) In getRegForInlineAsmConstraint, if this inline asm stuff is run >>> after type legalization you could turn that type checking at the top of the >>> function into an assert() >>> comment: Upper register r16..r32. <<-- typo registerS and r32 >>> >>> John or Eric, please give Stepan commit permissions. >>> >>> >>> >>> 2013/6/17 Stepan Dyatkovskiy <stp...@na...> >>> >>> Hello Borja, >>> >>> >>> ok here we go: >>> >>> 1) in AVRRegisterInfo.td: im ok with the lGPR8 regclass since we dont >>> have it yet and i guess it's needed for the l constraint, but rename it >>> to GPR8lo. The hGPR8 regclass comment says lower registers, so typo >>> there, but anyways can't you use the LD8 regclass? Rename simplehGPR8 to >>> LD8lo, we'll need it in the future for some MUL instructions. >>> >>> Everything here were fixed as you mentioned. >>> >>> >>> >>> 2) in AVRISelLowering.cpp: for the t, x, y, z shouldn't we return >>> C_Register? Probably for b aswell. >>> 2.1) in getSingleConstraintMatchWeight can you clarify me what's the >>> diff between CW_SpecificReg and CW_Register. Shouldn't the G constraint >>> be a Constant? Same for the other constraints? >>> >>> All this stuff with weights is due to support of multiple constraints. >>> For some operands you may set *the set* of constraints, e.g. 'mr': get >>> either memory of register. In that case we're use weights. What should we >>> select for 'bx' constraint for example? One of y,z or x? So, currently llvm >>> gets register first from class with bigger weight. Since CW_SpecificReg < >>> CW_Register it will select one of y,z. >>> >>> For more information see implementation of "TargetLowering::** >>> getMultipleConstraintMatchWeig**ht" and "TargetLowering::** >>> ParseConstraints". >>> >>> 'G' shouldn't be CW_Register, of course, that was my typo. I've fixed >>> it, now it as all other constants just a CW_Default. >>> >>> >>> 2.2) in getRegForInlineAsmConstraint fixup the regclasses per point (1). >>> for w you could use the IWREGS regclass, the docs say they are regpairs, >>> not 8 bit regs as you declared in the .td file. >>> >>> That was also fixed. >>> >>> -Stepan. >>> >>> >>> The rest looks great. >>> >>> >>> 2013/6/14 Borja Ferrer <bor...@gm... >>> <mailto:bor...@gm...>**> >>> >>> >>> Going to review the patch now. >>> >>> No, there is no test for allocation order, I don't know a good way >>> of testing that. If you want you can replace the register list by >>> several sequences. >>> >>> >>> 2013/6/14 Stepan Dyatkovskiy <stp...@na... >>> <mailto:stp...@na...>> >>> >>> >>> Hi Borja, >>> All constraints are supported now. >>> The new patch is attached. >>> >>> -- Added support for all documented constraints. >>> -- Fixed tests as you mentioned. >>> >>> Relative to GPR8, >>> Do we have some tests that check allocation order? If so, all of >>> them were passed :-) >>> >>> Though I can use the explicit enumeration way you're currently >>> using... >>> >>> -Stepan. >>> >>> Borja Ferrer wrote: >>> >>> Ok, there are some small style issues but i will fix them >>> after you can >>> commit (braces in AVRAsmPrinter::__**PrintAsmOperand), >>> >>> afterwards you may >>> check them for future reference. >>> >>> About the GPR8 replacement, I'm not sure now, but will it >>> change the >>> register allocation order using the "sequence" set >>> instruction? This was >>> changed some time ago so I dont remember what was the new >>> behaviour. >>> In the test cases please add a CHECK line for the function >>> name, check >>> the other test cases in the folder to see what i mean. >>> You may need to add inline asm support in clang aswell, >>> there are some >>> methods that need to be implemented there inside the AVR >>> classes, >>> probably for error reporting stuff. >>> >>> 1) I dont know of any compatible projects, sorry. I've >>> tested big C >>> programs like a floating point emulation library. >>> 2) for now only the tests there. >>> 3) John please give Stepan commit access to SVN. >>> >>> Heh Eric, that's ok, for inline asm there's no room for >>> optimizations >>> but for other compiler features sure :) >>> >>> >>> >>> >>> 2013/6/13 Stepan Dyatkovskiy <stp...@na... >>> <mailto:stp...@na...> <mailto:stp...@na... >>> <mailto:stp...@na...>>> >>> >>> Hi Borja, >>> This is today patch. >>> 1. Added and tested support for register constraints >>> (a,b,d,e,q,r,t,w,x,y,z,l). >>> 2. Refactored GPR8 registers class, added new registers >>> classes: >>> lGPR8, hGPR8, simplehGPR8 and specialUpperGPR8. >>> 3. Fixed code-style. >>> >>> P.S.: In case you decided to give me commit access: >>> 1. Do you have some AVR projects that are compilable >>> with avr-llvm? >>> I mean kind of llvm's test-suite replacement. >>> 2. What ought to be tested before commit, except the >>> "test/CodeGen/AVR" tests? >>> 3. My SourceForge account name is: "kaomoneus". >>> >>> -Stepan. >>> >>> Borja Ferrer wrote: >>> >>> The patch looks good, some comments about coding >>> style. We use a >>> different standard compared to llvm's, most >>> important things are: >>> 1) braces go into new lines. >>> 2) always place braces even if they're for a 1 line >>> statement >>> >>> this: >>> + std::pair<unsigned, const TargetRegisterClass*> >>> + getRegForInlineAsmConstraint(_** >>> ___const >>> >>> std::string >>> >>> &Constraint, >>> + EVT VT) const; >>> + >>> should be: >>> std::pair<unsigned, const TargetRegisterClass *> >>> << space >>> between >>> name and * >>> getRegForInlineAsmConstraint(_**___const >>> std::string >>> >>> &Constraint, >>> EVT VT) const; >>> >>> this: >>> + ConstraintWeight getSingleConstraintMatchWeight* >>> *____( >>> >>> >>> + AsmOperandInfo &info, const char *constraint) >>> const; >>> should be: >>> ConstraintWeight >>> getSingleConstraintMatchWeight**____(AsmOperandInfo >>> >>> &info, >>> >>> >>> const char >>> *constraint) >>> const; >>> >>> >>> if there are any other small details i can fix them >>> post commit. >>> >>> >>> >>> 2013/6/13 Borja Ferrer <bor...@gm... >>> <mailto:bor...@gm...> >>> <mailto:bor...@gm... >>> <mailto:bor...@gm...>**> >>> <mailto:bor...@gm... >>> <mailto:bor...@gm...> <mailto:bor...@gm... >>> <mailto:bor...@gm...>**>__>__> >>> >>> >>> >>> >>> Nice Stepan, I will review your patch later >>> on. You should >>> be given >>> commit access to this svn repo until we >>> finally decide >>> where to move >>> on all of the code. >>> >>> >>> 2013/6/13 Stepan Dyatkovskiy >>> <stp...@na... <mailto:stp...@na...> >>> <mailto:stp...@na... <mailto:stp...@na... >>> >> >>> <mailto:stp...@na... >>> <mailto:stp...@na...> <mailto:stp...@na... >>> <mailto:stp...@na...>>>> >>> >>> >>> >>> Hi all, >>> I'll use this reference for >>> implementation, right? >>> http://savannah.nongnu.org/___** >>> _download/avr-libc/avr-libc-__**__user-manual-1.8.0.pdf.bz2<http://savannah.nongnu.org/____download/avr-libc/avr-libc-____user-manual-1.8.0.pdf.bz2> >>> <http://savannah.nongnu.org/__** >>> download/avr-libc/avr-libc-__**user-manual-1.8.0.pdf.bz2<http://savannah.nongnu.org/__download/avr-libc/avr-libc-__user-manual-1.8.0.pdf.bz2> >>> > >>> >>> >>> >>> <http://savannah.nongnu.org/__** >>> download/avr-libc/avr-libc-__**user-manual-1.8.0.pdf.bz2<http://savannah.nongnu.org/__download/avr-libc/avr-libc-__user-manual-1.8.0.pdf.bz2> >>> <http://savannah.nongnu.org/**download/avr-libc/avr-libc-** >>> user-manual-1.8.0.pdf.bz2<http://savannah.nongnu.org/download/avr-libc/avr-libc-user-manual-1.8.0.pdf.bz2> >>> >> >>> >>> -Stepan. >>> >>> Stepan Dyatkovskiy wrote: >>> > Ops. Forget to apply patch itself... >>> > >>> > -Stepan. >>> > >>> > Stepan Dyatkovskiy wrote: >>> >> Hi all. That's a Thursday patch with >>> inline asm. >>> Currently >>> the only >>> >> constraint is supported: register >>> ('r'). >>> >> >>> >> -Stepan. >>> >> >>> >> >>> >>> ------------------------------** >>> ____--------------------------**--__--__------------------ >>> >>> >>> >> >>> >> This SF.net email is sponsored by >>> Windows: >>> >> >>> >> Build for Windows Store. >>> >> >>> >> >>> http://p.sf.net/sfu/windows-__**__dev2dev<http://p.sf.net/sfu/windows-____dev2dev> >>> <http://p.sf.net/sfu/windows-_**_dev2dev<http://p.sf.net/sfu/windows-__dev2dev> >>> > >>> <http://p.sf.net/sfu/windows-_**_dev2dev<http://p.sf.net/sfu/windows-__dev2dev> >>> <http://p.sf.net/sfu/windows-**dev2dev<http://p.sf.net/sfu/windows-dev2dev> >>> >> >>> >> >>> ______________________________**_____________________ >>> >> avr-llvm-devel mailing list >>> >> >>> avr-llvm-devel@lists.__sourcef**__orge.net<http://sourcef__orge.net/> >>> <http://sourceforge.net> >>> <mailto:avr-llvm-devel@lists._**_sourceforge.net >>> <mailto:avr-llvm-devel@lists.**sourceforge.net<avr...@li...> >>> >> >>> <mailto:avr-llvm-devel@lists. >>> <mailto:avr-llvm-devel@lists.>**____sourceforge.net >>> <http://sourceforge.net> >>> <mailto:avr-llvm-devel@lists._**_sourceforge.net >>> <mailto:avr-llvm-devel@lists.**sourceforge.net<avr...@li...> >>> >>> >>> >>> >> >>> https://lists.sourceforge.net/** >>> ____lists/listinfo/avr-llvm-__**devel<https://lists.sourceforge.net/____lists/listinfo/avr-llvm-__devel> >>> <https://lists.sourceforge.**net/__lists/listinfo/avr-llvm-* >>> *devel <https://lists.sourceforge.net/__lists/listinfo/avr-llvm-devel>> >>> >>> <https://lists.sourceforge.__** >>> net/lists/listinfo/avr-llvm-__**devel >>> <https://lists.sourceforge.**net/lists/listinfo/avr-llvm-** >>> devel <https://lists.sourceforge.net/lists/listinfo/avr-llvm-devel>>> >>> >> >>> > >>> > >>> > >>> > >>> >>> >>> ------------------------------** >>> ____--------------------------**--__--__------------------ >>> >>> >>> > This SF.net email is sponsored by >>> Windows: >>> > >>> > Build for Windows Store. >>> > >>> > http://p.sf.net/sfu/windows-__** >>> __dev2dev <http://p.sf.net/sfu/windows-____dev2dev> >>> <http://p.sf.net/sfu/windows-_**_dev2dev<http://p.sf.net/sfu/windows-__dev2dev> >>> > >>> <http://p.sf.net/sfu/windows-_**_dev2dev<http://p.sf.net/sfu/windows-__dev2dev> >>> <http://p.sf.net/sfu/windows-**dev2dev<http://p.sf.net/sfu/windows-dev2dev> >>> >> >>> > >>> > >>> > >>> > >>> ______________________________**_____________________ >>> > avr-llvm-devel mailing list >>> > >>> avr-llvm-devel@lists.__sourcef**__orge.net<http://sourcef__orge.net/> >>> <http://sourceforge.net> >>> <mailto:avr-llvm-devel@lists._**_sourceforge.net >>> <mailto:avr-llvm-devel@lists.**sourceforge.net<avr...@li...> >>> >> >>> <mailto:avr-llvm-devel@lists. >>> <mailto:avr-llvm-devel@lists.>**____sourceforge.net >>> <http://sourceforge.net> >>> <mailto:avr-llvm-devel@lists._**_sourceforge.net >>> <mailto:avr-llvm-devel@lists.**sourceforge.net<avr...@li...> >>> >>> >>> >>> > >>> https://lists.sourceforge.net/** >>> ____lists/listinfo/avr-llvm-__**devel<https://lists.sourceforge.net/____lists/listinfo/avr-llvm-__devel> >>> <https://lists.sourceforge.**net/__lists/listinfo/avr-llvm-* >>> *devel <https://lists.sourceforge.net/__lists/listinfo/avr-llvm-devel>> >>> >>> <https://lists.sourceforge.__** >>> net/lists/listinfo/avr-llvm-__**devel >>> <https://lists.sourceforge.**net/lists/listinfo/avr-llvm-** >>> devel <https://lists.sourceforge.net/lists/listinfo/avr-llvm-devel>>> >>> > >>> >>> >>> >>> >>> ------------------------------** >>> ____--------------------------**--__--__------------------ >>> >>> >>> This SF.net email is sponsored by Windows: >>> >>> Build for Windows Store. >>> http://p.sf.net/sfu/windows-__**__dev2dev<http://p.sf.net/sfu/windows-____dev2dev> >>> <http://p.sf.net/sfu/windows-_**_dev2dev<http://p.sf.net/sfu/windows-__dev2dev> >>> > >>> <http://p.sf.net/sfu/windows-_**_dev2dev<http://p.sf.net/sfu/windows-__dev2dev> >>> <http://p.sf.net/sfu/windows-**dev2dev<http://p.sf.net/sfu/windows-dev2dev> >>> >> >>> >>> ______________________________**_____________________ >>> avr-llvm-devel mailing list >>> avr-llvm-devel@lists.__sourcef**__orge.net<http://sourcef__orge.net/> >>> <http://sourceforge.net> >>> <mailto:avr-llvm-devel@lists._**_sourceforge.net >>> <mailto:avr-llvm-devel@lists.**sourceforge.net<avr...@li...> >>> >> >>> <mailto:avr-llvm-devel@lists. >>> <mailto:avr-llvm-devel@lists.>**____sourceforge.net >>> <http://sourceforge.net> >>> <mailto:avr-llvm-devel@lists._**_sourceforge.net >>> <mailto:avr-llvm-devel@lists.**sourceforge.net<avr...@li...> >>> >>> >>> https://lists.sourceforge.net/** >>> ____lists/listinfo/avr-llvm-__**devel<https://lists.sourceforge.net/____lists/listinfo/avr-llvm-__devel> >>> <https://lists.sourceforge.**net/__lists/listinfo/avr-llvm-* >>> *devel <https://lists.sourceforge.net/__lists/listinfo/avr-llvm-devel>> >>> >>> <https://lists.sourceforge.__** >>> net/lists/listinfo/avr-llvm-__**devel >>> <https://lists.sourceforge.**net/lists/listinfo/avr-llvm-** >>> devel <https://lists.sourceforge.net/lists/listinfo/avr-llvm-devel>>> >>> >>> >>> >>> >>> >>> >>> >>> >> > |