Hello every body,<br>With the ideas and suggestions that I got from  you all I came up with the proposal for the project of improving the llvm-test testsuite. I am posting my proposal here, if you have any feedback(anything to be added or anything to be removed ) please let me know, so that I can improve the proposal before I upload it in Google web app. Thanks in advance.!<br>
Regarda,<br>Rjika<br><br><b>Proposal for summer of code 2008, Rajika Kumarasiri</b><br><br><b>1. Project title:</b><br>Extend the llvm-test testsuite to include new programs and benchmaraks[1], and give a web service interface to run a test build remotely. <br>
<br><b>2. Abstract:</b><br>LLVM[2] is a collection of  libraries and header files of a virtual machine and  has a GCC-front end in which C/C++ programs can be compiled into LLVM bitcode. <br>The aim of this project is to improve the testsuite[3] of LLVM, which is an extremely useful task. So the tesuite of the llvm is extended by including this new programs and benchmarks[1]. The test programs would be a part of the already existing testsuite with ability to check new features and correctness and also benchmarks. The test cases would reproduce any failures when LLVM fails to build the third party codes[1].<br>
Test programs would be either small, independent ones(located in llvm/test) which check correctness and features or large whole programs(located in llvm/project/llvm-test) which check the benchmarks. In both cases test cases will be programs which are more CPU intensive (to get the most effect out of machine time) and will have a few library dependencies(to avoid the version mismatch problem and to run on wide range of platforms).<br>
At the other end project include a web service interface in which user can submit a test  build for a particular target and get the result out put.<br><br><br><b>3. Deliverables:</b><br>1.Individual test programs in source code format.<br>
2.A small HOWTO associate with each and every test program(which includes how to use, which input parameters should be supplied and the detailed outputs). This is the documentation associated with the each of the test case.<br>
3.A web service interface in which a user can submit a test and receive the result.<br>4.A small HOWTO which describe the inputs, outputs and how to use the web service interface.<br>5.Documentation to support the continuation of the project (if required)<br>
<br><b>4. Benefits to the llvm community</b><br>After successful completion of the project following will be available to the LLVM community.<br>1.An improved test suite with new benchmarks programs.<br>2.A web service interface, in which a user can submit a test build and get the result. <br>
    <br><b>5. Overview:</b><br>My work in this project will cover two parts. <br>First part is the improvement which is going to be added to the LLVM test suite. The LLVM test suite comes in two forms in which one is a set of independent code fragment (under llvm/test) and whole programs (under llvm/project/llvm-test).  Having a good test suite for the LLVM is an extremely important task, since it gives a lot of coverage of programs and enables to spot and improve any problem in the compiler. The implementation details are as follows (in abstract form). <br>
1.Compile the benchmarks programs[1] with LLVM compiler.<br>2.If this successful update the relevant make files in llvm/project/llvm-test to include the new benchmark to the llvm test suite.<br>3.If this fails, derive(rewrite or modify the existing one) a small test case program(this entirely depend on the benchmark program use[1]) and add it to the test suite. Extend the build system(modify the makefiles in llvm/test and llvm/project/llvm-test) to include the new test cases to the LLVM testsuite. <br>
For example consider the BioPerf[1]. I should take the existing benchmarks and appropriately update its makefiles so that it builds on the whole program testsuite (in llvm/project/llvm-test), if BioPerf fails to build with LLVM I need to derive(modify an existing one or write a new test case) small test case to reproduce the failures. These independent tests are then added to llvm/test together with the relevant updates in makefiles of the build system.<br>
When developing benchmarks input data set must be adjusted appropriately so that it doesn't take hours to run the this benchmark and it takes enough time to notice the performance changes. <br><br>My second work on the project involves developing a web service interface so that a user can submit test build and get the result remotely.  Once a user submits a test build with a specific target the build result (any possible deviation from that target) will be given. <br>
Having this kind of a web service interface can be very useful, since it avoids the need of maintaining two trees of code base for testing purposes. And also if this web service can be exposed to the llvm-user community they will also get the benefit to run a test build remotely for a particular target. <br>
Implementation of the web service is straight forward, the user of the web service will be given a client(which takes the payload to the service) developed using client API and it will communicate with the service(which actually runs the test suite) developed with the service API of the Apache Axis2/C web services frame work[4]. Axis2/C written in C(giving us the ability to embed it to LLVM easily) and come under Apache license[5] (giving us the ability to ship with LLVM due to the Apache license). <br>
<br><b><br>6. Project Plan:</b><br>I have broken down the project under 4 steps as follows. Weekly status updates will be given in the llvm-dev list.<br>Step1: Initial Planning and Designing <br>I would look into the build system of LLVM testsuite, how a simple test can be written for the testsuite under this step. And also I'll look into how a C/C++ program can be compiled using LLVM compiler in this time. And also I will design the web service interface(together with inputs, out puts etc..,) <br>
Deliverable: Prototype test case. <br>Estimated Completion: 21st May 2008<br>Step2: Implementation of initial test suite programs<br>I would focus on implementing the testsuite programs in this step. The selection of the benchmarks program priority[1] will depend on factors such as pointer intensive programs, memory intensive program etc.,I hope to add programs to the test suite as far as I can within this time from the list[1].<br>
Deliverable(s): Completed test cases from the list[1] and the documentation for mid evaluation. Estimated Completion: 2nd July 2008 <br>Step3: Improvements and  Implementing web service interface and the rest of the benchmarks programs<br>
Modifications or improvements suggested at the mid evaluation would be completed in this step.  And also the web service will be developed. And also the rest of the benchmarks will be completed from the list.<br>Deliverable(s): Web service and the test programs for the rest of the list. Estimated Completion: 3th August 2008 <br>
Step4: Final Product and Documents <br>This step would complete the project in which. Necessary documents would also be present with the final product. <br>Deliverable(s): Final product and documentation Estimated Completion: 11th August 2008 <br>
<b><br>7. Biography:</b><br>I am a final year computer science and engineering undergraduate of the Department of Computer Science and Engineering of  University of Moratuwa, Sri Lanka[6]. I have involved in Open source development regarding web services. I developed a firefox extension which introduced a new Javascript object, WSRequest which can be used for consume web services. It is free and open source in which the code is available here[7]. And also I participated in GSoC 2007 program and developed a part of the mail transport for Apache Axis2/C[8].  <br>
I have a great interest in compiler technology and have experience in C/C++ programming. I took the one semester course on compiler theory at the university and developed a lexical analyzer in C for a subset of Javascript language [9]  and a pretty printer for a subset of Javascript in python[10]. I was a looking for a compiler project to work on and I found LLVM, and I'll continuously work on it to make any contribution to the llvm community. <br>
Other information about me including my projects work can be found in my resume[11].     <br><br><br><b>Reference:</b><br>[1] - <a href="http://nondot.org/sabre/LLVMNotes/#benchmarks">http://nondot.org/sabre/LLVMNotes/#benchmarks</a><br>
[2] - <a href="http://llvm.org/">http://llvm.org/</a><br>[3] - <a href="http://llvm.org/docs/TestingGuide.html">http://llvm.org/docs/TestingGuide.html</a><br>[4] - <a href="http://ws.apache.org/axis2/c/">http://ws.apache.org/axis2/c/</a><br>
[5] - <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a><br>[6] - <a href="http://www.cse.mrt.ac.lk/">http://www.cse.mrt.ac.lk/</a><br>[7] - <a href="https://wso2.org/repos/wso2/trunk/wsf/javascript/xpi/">https://wso2.org/repos/wso2/trunk/wsf/javascript/xpi/</a><br>
[8] - <a href="http://rajikacc.googlepages.com/mail_trasnport.tar.gz">http://rajikacc.googlepages.com/mail_trasnport.tar.gz</a><br>[9] - <a href="http://rajikacc.googlepages.com/scanner.tar.gz">http://rajikacc.googlepages.com/scanner.tar.gz</a><br>
[10] - <a href="http://rajikacc.googlepages.com/pretty_printer.tar.gz">http://rajikacc.googlepages.com/pretty_printer.tar.gz</a><br>[11] - <a href="http://rajikacc.googlepages.com/resume_rajika.pdf">http://rajikacc.googlepages.com/resume_rajika.pdf</a><br>
<br><br> <br>-- <br>comp.lang.c - <a href="http://groups.google.com/group/comp.lang.c/topics">http://groups.google.com/group/comp.lang.c/topics</a>