From: Nicklas Bo J. <nbj...@gm...> - 2012-04-30 21:01:34
|
No, im using a completely standard version of clang. On Mon, Apr 30, 2012 at 9:01 PM, Borja Ferrer <bor...@gm...> wrote: > Nice to see you around Eric :) > > Indeed, things are getting zero extended and then truncated back, there > are two things going on here. First is that I'm getting things converted to > i16 instead of i32, did you patch clang? I'll have to check if the target > patch stuff of clang is right. Second is that I dont have the zeroext > attribute and that's my fault because it's a patch for clang that I haven't > commited. > > The type promotion is something in the C standard and because sizeof(int) > is bigger than a register things get a bit nasty, but it's valid code. > > > 2012/4/30 Nicklas Bo Jensen <nbj...@gm...> > >> I'm using clang. >> >> define zeroext i8 @add() nounwind uwtable { >> %a = alloca i8, align 1 >> %b = alloca i8, align 1 >> store i8 5, i8* %a, align 1 >> store i8 7, i8* %b, align 1 >> %1 = load i8* %a, align 1 >> %2 = zext i8 %1 to i32 >> %3 = load i8* %b, align 1 >> %4 = zext i8 %3 to i32 >> %5 = add nsw i32 %2, %4 >> %6 = trunc i32 %5 to i8 >> ret i8 %6 >> } >> >> On Mon, Apr 30, 2012 at 8:22 PM, Borja Ferrer <bor...@gm...>wrote: >> >>> I see what's going here, our version is doing a 16bit addition and then >>> truncating it back to 8bits. Are you using clang or dragonegg for the >>> frontend? And can you post the llvm asm? >>> Also, no need to test imm+imm, only reg+imm and reg+reg will do, the >>> other will be constant folded. >>> >>> Ah, you'll need svn commit access, John or Eric could you do it? >>> >>> >>> 2012/4/30 Nicklas Bo Jensen <nbj...@gm...> >>> >>>> On Mon, Apr 30, 2012 at 12:33 AM, Borja Ferrer <bor...@gm...> >>>> wrote: >>>> >>>>> It should be similar to what other backends do, in this case we should >>>>> test adding with 2 regs and then with immediates values, and repeat this >>>>> for each value type (i8, i16, i32 and i64). Checking the instruction itself >>>>> is enough, no need to check for registers aswell, that will come in other >>>>> tests. But when testing with imm values we should check that the imm value >>>>> is correctly generated, so in this case ignore the reg, but check that the >>>>> imm field is valid. >>>>> >>>> >>>> Ok, makes sense. I will work on creating the tests. >>>> >>>> >>>>> And what do you mean in that you get different code between gcc and >>>>> llvm? >>>> >>>> >>>> Basically if I compile: >>>> >>>> unsigned char add() >>>> { >>>> unsigned char a,b; >>>> a = 5; >>>> b = 7; >>>> return a+b; >>>> } >>>> >>>> >>>> with avr-gcc part of the resulting assembler is: >>>> ldi r24,lo8(5) >>>> std Y+1,r24 >>>> ldi r24,lo8(7) >>>> std Y+2,r24 >>>> ldd r25,Y+1 >>>> ldd r24,Y+2 >>>> add r24,r25 >>>> >>>> with clang+avr-llvm part of the resulting assembler is: >>>> ldi r24, 5 >>>> std Y+2, r24 >>>> ldi r24, 7 >>>> std Y+1, r24 >>>> ldd r24, Y+2 >>>> adiw r25:r24, 7 >>>> andi r24, 255 >>>> andi r25, 0 >>>> >>>> So they use different approaches(add and adiw) to solve the same >>>> problem. >>>> >>>> Thanks >>>> Nicklas >>>> >>>> 2012/4/29 Nicklas Bo Jensen <nbj...@gm...> >>>>> >>>>>> Sure. Just wanted to actually compile the code before writing tests. >>>>>> >>>>>> Got how the test framework works and added a very small test that is >>>>>> working perfectly. >>>>>> >>>>>> How detailed should the test be? Should it check the generated >>>>>> assembly fully or just the main parts, e.g. the addition itself? For an >>>>>> addition the avr-llvm version is quite different from the avr-gcc version. >>>>>> >>>>>> Thanks, >>>>>> Nicklas >>>>>> >>>>>> >>>>>> >>>>>> On Sun, Apr 29, 2012 at 8:07 PM, Borja Ferrer <bor...@gm...>wrote: >>>>>> >>>>>>> The problem here is that I've represented register pairs as r29:r28 >>>>>>> while the assembler only wants the low register of the pair, that's why >>>>>>> you're getting that error but you're doing it right. >>>>>>> >>>>>>> But the way of writing regression tests in llvm is different to what >>>>>>> you're doing. Those tests in SVN are going away once we start writing the >>>>>>> new ones. >>>>>>> >>>>>>> Read this: http://llvm.org/docs/TestingGuide.html >>>>>>> and then go to >>>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ and >>>>>>> choose any target you wish (say msp430 since it's the most similar one to >>>>>>> us) to see how real tests look like. >>>>>>> >>>>>>> Basically, you have to write a test in llvm assembly, and then with >>>>>>> CHECK you write the avr assembly that should be emitted, if it matches then >>>>>>> the test passes otherwise it fails. You can avoid writing the llvm assembly >>>>>>> by writing the test in C and then translate it to llvm assembly with clang. >>>>>>> >>>>>>> Try writing a small test for add using the llvm testing >>>>>>> infrastructure and then run it with llvm to see if it passes. >>>>>>> It's very important that you write the expected output assembly >>>>>>> right, otherwise we'll generate wrong code to make the test pass, but since >>>>>>> tests are quite small it's easy to get it right. >>>>>>> >>>>>>> >>>>>>> 2012/4/29 Nicklas Bo Jensen <nbj...@gm...> >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> I have successfully been able to compile your testcases >>>>>>>> (/avr-llvm/testcases/*.ll) to something looking like valid avr assembler. >>>>>>>> >>>>>>>> How should I test/simulate the assembler? I get errors when trying >>>>>>>> to simulate the generated assembler in AVRStudio. Perhaps they use a >>>>>>>> different assembler? >>>>>>>> >>>>>>>> For one test, add1.ll I cannot process it using avr-as. I have done: >>>>>>>> >>>>>>>> ../../build/Debug+Asserts/bin/llc --march=avr add1.ll -o add1.s >>>>>>>> avr-as -mmcu=atmega168 add1.s >>>>>>>> >>>>>>>> >>>>>>>> and get the error: >>>>>>>> >>>>>>>> asm.s: Assembler messages: >>>>>>>> asm.s:12: Error: register r24, r26, r28 or r30 required >>>>>>>> asm.s:12: Error: `,' required >>>>>>>> asm.s:12: Error: garbage at end of line >>>>>>>> asm.s:24: Error: register r24, r26, r28 or r30 required >>>>>>>> asm.s:24: Error: `,' required >>>>>>>> asm.s:24: Error: garbage at end of line >>>>>>>> >>>>>>>> >>>>>>>> Am I doing something wrong? I have included the assembler. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Nicklas >>>>>>>> >>>>>>>> On Sun, Apr 29, 2012 at 7:23 PM, Borja Ferrer < >>>>>>>> bor...@gm...> wrote: >>>>>>>> >>>>>>>>> Hello Neil I'm replying you in this thread, i dont know why I >>>>>>>>> didn't receive your mail, i had to look in SF to read it. >>>>>>>>> >>>>>>>>> Anyways, first try to build the backend so you can play a bit with >>>>>>>>> it to get familiar with its code. Try compiling some C code to generate avr >>>>>>>>> assembly. >>>>>>>>> >>>>>>>>> 2012/4/23 Nicklas Bo Jensen <nbj...@gm...> >>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> I'll be happy to contribute, after I have fixed my issues getting >>>>>>>>>> avr-llvm to compile in the first place. >>>>>>>>>> >>>>>>>>>> BR, >>>>>>>>>> Nicklas >>>>>>>>>> >>>>>>>>>> On Sun, Apr 22, 2012 at 7:26 PM, Borja Ferrer < >>>>>>>>>> bor...@gm...> wrote: >>>>>>>>>> >>>>>>>>>>> I think it's time to stop adding more features until we cover >>>>>>>>>>> what is currently implemented with regression tests. Otherwise the further >>>>>>>>>>> we go the harder will be to cover everything up, from now on it's going to >>>>>>>>>>> be easier to go in parallel. >>>>>>>>>>> In the past emails I've seen people interested in helping out >>>>>>>>>>> with this, it's a good way of starting with some development becuase it's >>>>>>>>>>> an easy task to do and it helps to understand how llvm works, so anybody >>>>>>>>>>> interested check in here so I know if I'm going to have any help at all or >>>>>>>>>>> I have to do it myself. >>>>>>>>>>> >>>>>>>>>>> So if there's some help available we can plan in this thread >>>>>>>>>>> what needs to get covered and how to do it, I'll wait a few days for any >>>>>>>>>>> replies. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>> For Developers, A Lot Can Happen In A Second. >>>>>>>>>>> Boundary is the first to Know...and Tell You. >>>>>>>>>>> Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! >>>>>>>>>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> avr-llvm-devel mailing list >>>>>>>>>>> avr...@li... >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/avr-llvm-devel >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>> Live Security Virtual Conference >>>>>>>>> Exclusive live event will cover all the ways today's security and >>>>>>>>> threat landscape has changed and how IT managers can respond. >>>>>>>>> Discussions >>>>>>>>> will include endpoint security, mobile security and the latest in >>>>>>>>> malware >>>>>>>>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> avr-llvm-devel mailing list >>>>>>>>> avr...@li... >>>>>>>>> https://lists.sourceforge.net/lists/listinfo/avr-llvm-devel >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > |