You are welcome. /* example.c */ // RUN: clang %s -S -O0 -emit-llvm -o %t.ll // RUN: llc %t.ll -O0 -march=x86 -o %t.s // RUN: FileCheck < %t.s %s // CHECK: fct unsigned int fct(unsigned int n) { if(n>0) return fct(n-1)*n; else return 1; } /* end example.c */ /* lit.local.cfg */ config.suffixes = ['.c', '.cpp', '.ll'] targets = set(config.root.targets_to_build.split()) if not 'VPU' in targets: config.unsupported = True /* end lit.local.cfg */ 2012/8/28 Changcheng Wang <changcheng at multicorewareinc.com>:> hi,yang: > thanks for your help! > my net is so poor that i can not donwload your attachment. > would you like to paste here,or send to my other email:200005275 at 163.com? > > yours > > changcheng > > > > On Tue, Aug 28, 2012 at 11:43 AM, Triple Yang <triple.yang at gmail.com> wrote: >> Wang, >> >> Attachment is a simple example, you may put it in test/CodeGen, and run with >> >> llvm-lit C90 >> >> It worked ok in my llvm 3.2 devel. Let know if you run into any trouble. >> >> Regards. >> >> 2012/8/27 Changcheng Wang <changcheng at multicorewareinc.com>: >>> hi,Yang: >>> if you can give me a examle,which check out a string(such as "abcd") >>> from a file(such as aaa.c) with fileCheck? >>> i tried to write it but failed. >>> >>> thanks for your help! >>> >>> best wished! >>> >>> changcheng >>> >>> On Wed, Aug 22, 2012 at 9:30 PM, Triple Yang <triple.yang at gmail.com> wrote: >>>> I guess so. >>>> FileCheck has powerful extensions than just matching some strings so that >>>> it can support complex situations. >>>> >>>> 2012/8/22 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>> yeah,i see. >>>>> i thought FileCheck check if the same string in the two file,is it? >>>>> the file t.s maybe do not have the same string with %s,so FileCheck >>>>> perhaps give a fail. >>>>> i am not sure about it. >>>>> >>>>> On Wed, Aug 22, 2012 at 3:32 PM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>> 2012/8/22 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>> the example is more like what i need,it is so nice. >>>>>>> but,i am indefinite if "RUN: FileCheck < %t.s %s" can pass,i >>>>>>> understand that t.s was translate from t.ll,%s means read the local >>>>>>> source,are they the same? >>>>>> >>>>>> %t indicates a temporary file for output. ".s" is just a suffix I used >>>>>> conventionly. >>>>>> You can replace it with any string you like. >>>>>> >>>>>> See entry "tmp" in http://llvm.org/docs/TestingGuide.html#rtvars >>>>>> >>>>>>> >>>>>>> On Wed, Aug 22, 2012 at 1:55 PM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>>>> I did an experiment just now with a test case like: >>>>>>>> // RUN: clang %s -S -emit-llvm -o %t.ll >>>>>>>> // RUN: llc %t.ll -o %t.s >>>>>>>> // RUN: FileCheck < %t.s %s >>>>>>>> >>>>>>>> ... >>>>>>>> >>>>>>>> // CHECK: ... >>>>>>>> >>>>>>>> And it worked. >>>>>>>> >>>>>>>> It seems clang does not take stdin as its input, so "clang < %s" fails. >>>>>>>> Meanwhile, both "llc < %t.ll" and "llc %t.ll" work. >>>>>>>> >>>>>>>> 2012/8/22 Triple Yang <triple.yang at gmail.com>: >>>>>>>>> 2012/8/21 Triple Yang <triple.yang at gmail.com>: >>>>>>>>>> 2012/8/21 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>>>>>> Hi,Yang >>>>>>>>>>> thanks for your entire answer,i will do it follow you. >>>>>>>>>>> still another question puzzled me:i write a hello.c file like this: >>>>>>>>>>> >>>>>>>>>>> //RUN: llc -march=c < %s | FileCheck %s >>>>>>>>>>> #include"stdio.h" >>>>>>>>>>> >>>>>>>>>>> int main() { >>>>>>>>>>> printf ("Helloworld.\n"); >>>>>>>>>>> return 0; >>>>>>>>>>> } >>>>>>>>>>> >>>>>>>>>>> in fact, i want to thanslate it to a hello.ll file like this: >>>>>>>>>>> ;RUN: llc -march=c < %s | FileCheck %s >>>>>>>>>>> ....... >>>>>>>>>>> ;CHECK..... >>>>>>>>>>> >>>>>>>>>>> but,when i thanslate the hello.c with clang,the sentence "//RUN: llc >>>>>>>>>>> -march=c < %s | FileCheck %s" was treated as comment. >>>>>>>>>>> >>>>>>>>>>> it samed the method translating hello.c to hello.ll is wrong,isnot it? >>>>>>>>>> >>>>>>>>>> To translate a .c file to a .ll file, you should wirte, for example, >>>>>>>>>> clang -emit-llvm -S test.c -o test.ll >>>>>>>>>> >>>>>>>>>> And the corresponding command for regression test might be: >>>>>>>>>> ; RUN: clang < %s -emit-llvm -S | FileCheck %s >>>>>>>>> >>>>>>>>> We can write: >>>>>>>>> // RUN: clang < %s -emit-llvm -S >>>>>>>>> in a .c file to test clang. >>>>>>>>> >>>>>>>>> And if we use FileCheck, like: >>>>>>>>> // RUN: clang < %s -emit-llvm -S | FileCheck %s >>>>>>>>> make sure there is some "// CHECK:" in that file, or lit will report a failure. >>>>>>>>> >>>>>>>>> See utils/lit/lit/ExampleTests/Clang for more details. >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Regards. >>>>>>>>>> >>>>>>>>>> (PS. When you reply to this email, make sure you send a copy to >>>>>>>>>> llvmdev at cs.uiuc.edu) >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> thanks very much! >>>>>>>>>>> best wishes >>>>>>>>>>> >>>>>>>>>>> changcheng >>>>>>>>>>> >>>>>>>>>>> On Tue, Aug 21, 2012 at 10:46 AM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>>>>>>>> Hi, changcheng, >>>>>>>>>>>> >>>>>>>>>>>> There are following steps to be taken to write a test case: >>>>>>>>>>>> 1. create a directory in test, say "test/XXX" >>>>>>>>>>>> 2. create a file named lit.local.cfg, which is a configuration file. >>>>>>>>>>>> The straightforward way is to copy an existed one, >>>>>>>>>>>> like "test/CodeGen/SPARC/lit.local.cfg". You might need make some >>>>>>>>>>>> modification on it. >>>>>>>>>>>> 3. create a file, say "example.ll" >>>>>>>>>>>> (The name of file does not matter, but the suffix of the file name >>>>>>>>>>>> DOES matter. See config.suffixes = [ ... ] in lit.local.cfg) >>>>>>>>>>>> for more details. >>>>>>>>>>>> example.ll includes normal content of LLVM IR, and the ";RUN ..." >>>>>>>>>>>> directives at the beginning of the file. >>>>>>>>>>>> 4. run all regression test cases with "make check", which includes >>>>>>>>>>>> above test case newly added. >>>>>>>>>>>> Or you might want to run just that case with "llvm-lit test/XXX" >>>>>>>>>>>> or "llvm-lit test/XXX/example.ll" >>>>>>>>>>>> llvm-lit resides in BUILD tree, distinguished from source tree and >>>>>>>>>>>> install tree. You can find it under >>>>>>>>>>>> your-build-tree/Release+Asserts/bin/ or >>>>>>>>>>>> your-build-tree/Debug+Asserts/bin/ or likewise, which depends on your >>>>>>>>>>>> build >>>>>>>>>>>> configuration. >>>>>>>>>>>> >>>>>>>>>>>> By the way, in the following ";RUN ..." directive >>>>>>>>>>>> ; RUN: llc < %s -march=x86 | FileCheck %s >>>>>>>>>>>> %s indicates current file under test. I guess the first %s stands for >>>>>>>>>>>> the input for llc, while the second and last %s specifies >>>>>>>>>>>> what to check using "; CHECK ..." directives since you write them down >>>>>>>>>>>> on exactly CURRENT file. >>>>>>>>>>>> >>>>>>>>>>>> Hope it work for you. >>>>>>>>>>>> Regards. >>>>>>>>>>>> >>>>>>>>>>>> 2012/8/20 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>>>>>>>> hi,all: >>>>>>>>>>>>> i really want to how to write a regression test case,but i do not find >>>>>>>>>>>>> out a entire document about it. >>>>>>>>>>>>> By reading LLVM Testing Infrastructure Guide and FileCheck - Flexible >>>>>>>>>>>>> pattern matching file verifier, i only have a idea,but it is not >>>>>>>>>>>>> enough for me to write a test case.i need more detail about how to >>>>>>>>>>>>> write a RUN:lines. >>>>>>>>>>>>> >>>>>>>>>>>>> thanks for you scan,wish your letter. >>>>>>>>>>>>> >>>>>>>>>>>>> best wishes, >>>>>>>>>>>>> >>>>>>>>>>>>> changcheng >>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>> LLVM Developers mailing list >>>>>>>>>>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>>>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> 杨勇勇 (Yang Yongyong) >>>> >>>> >>>> >>>> -- >>>> 杨勇勇 (Yang Yongyong) >> >> >> >> -- >> 杨勇勇 (Yang Yongyong)-- 杨勇勇 (Yang Yongyong)
hi,yang: another question,i write a test like this: /*****test start******/ ; RUN: llc -march=c < %s | FileCheck %s ; ModuleID = 'hello.c' target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64- f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128- n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @.str = private unnamed_addr constant [12 x i8] c"helloworld\0A\00", align 1 define i32 @main() nounwind uwtable { entry: %retval = alloca i32, align 4 store i32 0, i32* %retval %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([12 x i8]* @.str, i32 0, i32 0)) ret i32 0 } declare i32 @printf(i8*, ...) ; ;CHECK: main ;CHECK: printf /******test end*******/ i run the example ok,now i what to check if the file llc ouput contain a string "helloworld",so i add a sentence ";CHECK: {helloworld}" after ";CHECK: printf".but it failed.why? yours, changcheng On Tue, Aug 28, 2012 at 12:38 PM, Triple Yang <triple.yang at gmail.com> wrote:> You are welcome. > > /* example.c */ > // RUN: clang %s -S -O0 -emit-llvm -o %t.ll > // RUN: llc %t.ll -O0 -march=x86 -o %t.s > // RUN: FileCheck < %t.s %s > > > // CHECK: fct > unsigned int fct(unsigned int n) { > if(n>0) return fct(n-1)*n; > else return 1; > } > /* end example.c */ > > > /* lit.local.cfg */ > config.suffixes = ['.c', '.cpp', '.ll'] > > targets = set(config.root.targets_to_build.split()) > if not 'VPU' in targets: > config.unsupported = True > /* end lit.local.cfg */ > > > 2012/8/28 Changcheng Wang <changcheng at multicorewareinc.com>: >> hi,yang: >> thanks for your help! >> my net is so poor that i can not donwload your attachment. >> would you like to paste here,or send to my other email:200005275 at 163.com? >> >> yours >> >> changcheng >> >> >> >> On Tue, Aug 28, 2012 at 11:43 AM, Triple Yang <triple.yang at gmail.com> wrote: >>> Wang, >>> >>> Attachment is a simple example, you may put it in test/CodeGen, and run with >>> >>> llvm-lit C90 >>> >>> It worked ok in my llvm 3.2 devel. Let know if you run into any trouble. >>> >>> Regards. >>> >>> 2012/8/27 Changcheng Wang <changcheng at multicorewareinc.com>: >>>> hi,Yang: >>>> if you can give me a examle,which check out a string(such as "abcd") >>>> from a file(such as aaa.c) with fileCheck? >>>> i tried to write it but failed. >>>> >>>> thanks for your help! >>>> >>>> best wished! >>>> >>>> changcheng >>>> >>>> On Wed, Aug 22, 2012 at 9:30 PM, Triple Yang <triple.yang at gmail.com> wrote: >>>>> I guess so. >>>>> FileCheck has powerful extensions than just matching some strings so that >>>>> it can support complex situations. >>>>> >>>>> 2012/8/22 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>> yeah,i see. >>>>>> i thought FileCheck check if the same string in the two file,is it? >>>>>> the file t.s maybe do not have the same string with %s,so FileCheck >>>>>> perhaps give a fail. >>>>>> i am not sure about it. >>>>>> >>>>>> On Wed, Aug 22, 2012 at 3:32 PM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>>> 2012/8/22 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>>> the example is more like what i need,it is so nice. >>>>>>>> but,i am indefinite if "RUN: FileCheck < %t.s %s" can pass,i >>>>>>>> understand that t.s was translate from t.ll,%s means read the local >>>>>>>> source,are they the same? >>>>>>> >>>>>>> %t indicates a temporary file for output. ".s" is just a suffix I used >>>>>>> conventionly. >>>>>>> You can replace it with any string you like. >>>>>>> >>>>>>> See entry "tmp" in http://llvm.org/docs/TestingGuide.html#rtvars >>>>>>> >>>>>>>> >>>>>>>> On Wed, Aug 22, 2012 at 1:55 PM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>>>>> I did an experiment just now with a test case like: >>>>>>>>> // RUN: clang %s -S -emit-llvm -o %t.ll >>>>>>>>> // RUN: llc %t.ll -o %t.s >>>>>>>>> // RUN: FileCheck < %t.s %s >>>>>>>>> >>>>>>>>> ... >>>>>>>>> >>>>>>>>> // CHECK: ... >>>>>>>>> >>>>>>>>> And it worked. >>>>>>>>> >>>>>>>>> It seems clang does not take stdin as its input, so "clang < %s" fails. >>>>>>>>> Meanwhile, both "llc < %t.ll" and "llc %t.ll" work. >>>>>>>>> >>>>>>>>> 2012/8/22 Triple Yang <triple.yang at gmail.com>: >>>>>>>>>> 2012/8/21 Triple Yang <triple.yang at gmail.com>: >>>>>>>>>>> 2012/8/21 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>>>>>>> Hi,Yang >>>>>>>>>>>> thanks for your entire answer,i will do it follow you. >>>>>>>>>>>> still another question puzzled me:i write a hello.c file like this: >>>>>>>>>>>> >>>>>>>>>>>> //RUN: llc -march=c < %s | FileCheck %s >>>>>>>>>>>> #include"stdio.h" >>>>>>>>>>>> >>>>>>>>>>>> int main() { >>>>>>>>>>>> printf ("Helloworld.\n"); >>>>>>>>>>>> return 0; >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> in fact, i want to thanslate it to a hello.ll file like this: >>>>>>>>>>>> ;RUN: llc -march=c < %s | FileCheck %s >>>>>>>>>>>> ....... >>>>>>>>>>>> ;CHECK..... >>>>>>>>>>>> >>>>>>>>>>>> but,when i thanslate the hello.c with clang,the sentence "//RUN: llc >>>>>>>>>>>> -march=c < %s | FileCheck %s" was treated as comment. >>>>>>>>>>>> >>>>>>>>>>>> it samed the method translating hello.c to hello.ll is wrong,isnot it? >>>>>>>>>>> >>>>>>>>>>> To translate a .c file to a .ll file, you should wirte, for example, >>>>>>>>>>> clang -emit-llvm -S test.c -o test.ll >>>>>>>>>>> >>>>>>>>>>> And the corresponding command for regression test might be: >>>>>>>>>>> ; RUN: clang < %s -emit-llvm -S | FileCheck %s >>>>>>>>>> >>>>>>>>>> We can write: >>>>>>>>>> // RUN: clang < %s -emit-llvm -S >>>>>>>>>> in a .c file to test clang. >>>>>>>>>> >>>>>>>>>> And if we use FileCheck, like: >>>>>>>>>> // RUN: clang < %s -emit-llvm -S | FileCheck %s >>>>>>>>>> make sure there is some "// CHECK:" in that file, or lit will report a failure. >>>>>>>>>> >>>>>>>>>> See utils/lit/lit/ExampleTests/Clang for more details. >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Regards. >>>>>>>>>>> >>>>>>>>>>> (PS. When you reply to this email, make sure you send a copy to >>>>>>>>>>> llvmdev at cs.uiuc.edu) >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> thanks very much! >>>>>>>>>>>> best wishes >>>>>>>>>>>> >>>>>>>>>>>> changcheng >>>>>>>>>>>> >>>>>>>>>>>> On Tue, Aug 21, 2012 at 10:46 AM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>>>>>>>>> Hi, changcheng, >>>>>>>>>>>>> >>>>>>>>>>>>> There are following steps to be taken to write a test case: >>>>>>>>>>>>> 1. create a directory in test, say "test/XXX" >>>>>>>>>>>>> 2. create a file named lit.local.cfg, which is a configuration file. >>>>>>>>>>>>> The straightforward way is to copy an existed one, >>>>>>>>>>>>> like "test/CodeGen/SPARC/lit.local.cfg". You might need make some >>>>>>>>>>>>> modification on it. >>>>>>>>>>>>> 3. create a file, say "example.ll" >>>>>>>>>>>>> (The name of file does not matter, but the suffix of the file name >>>>>>>>>>>>> DOES matter. See config.suffixes = [ ... ] in lit.local.cfg) >>>>>>>>>>>>> for more details. >>>>>>>>>>>>> example.ll includes normal content of LLVM IR, and the ";RUN ..." >>>>>>>>>>>>> directives at the beginning of the file. >>>>>>>>>>>>> 4. run all regression test cases with "make check", which includes >>>>>>>>>>>>> above test case newly added. >>>>>>>>>>>>> Or you might want to run just that case with "llvm-lit test/XXX" >>>>>>>>>>>>> or "llvm-lit test/XXX/example.ll" >>>>>>>>>>>>> llvm-lit resides in BUILD tree, distinguished from source tree and >>>>>>>>>>>>> install tree. You can find it under >>>>>>>>>>>>> your-build-tree/Release+Asserts/bin/ or >>>>>>>>>>>>> your-build-tree/Debug+Asserts/bin/ or likewise, which depends on your >>>>>>>>>>>>> build >>>>>>>>>>>>> configuration. >>>>>>>>>>>>> >>>>>>>>>>>>> By the way, in the following ";RUN ..." directive >>>>>>>>>>>>> ; RUN: llc < %s -march=x86 | FileCheck %s >>>>>>>>>>>>> %s indicates current file under test. I guess the first %s stands for >>>>>>>>>>>>> the input for llc, while the second and last %s specifies >>>>>>>>>>>>> what to check using "; CHECK ..." directives since you write them down >>>>>>>>>>>>> on exactly CURRENT file. >>>>>>>>>>>>> >>>>>>>>>>>>> Hope it work for you. >>>>>>>>>>>>> Regards. >>>>>>>>>>>>> >>>>>>>>>>>>> 2012/8/20 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>>>>>>>>> hi,all: >>>>>>>>>>>>>> i really want to how to write a regression test case,but i do not find >>>>>>>>>>>>>> out a entire document about it. >>>>>>>>>>>>>> By reading LLVM Testing Infrastructure Guide and FileCheck - Flexible >>>>>>>>>>>>>> pattern matching file verifier, i only have a idea,but it is not >>>>>>>>>>>>>> enough for me to write a test case.i need more detail about how to >>>>>>>>>>>>>> write a RUN:lines. >>>>>>>>>>>>>> >>>>>>>>>>>>>> thanks for you scan,wish your letter. >>>>>>>>>>>>>> >>>>>>>>>>>>>> best wishes, >>>>>>>>>>>>>> >>>>>>>>>>>>>> changcheng >>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>> LLVM Developers mailing list >>>>>>>>>>>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>>>>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> 杨勇勇 (Yang Yongyong) >>>>> >>>>> >>>>> >>>>> -- >>>>> 杨勇勇 (Yang Yongyong) >>> >>> >>> >>> -- >>> 杨勇勇 (Yang Yongyong) > > > > -- > 杨勇勇 (Yang Yongyong)
2012/8/28 Changcheng Wang <changcheng at multicorewareinc.com>:> hi,yang: > another question,i write a test like this: > /*****test start******/ > ; RUN: llc -march=c < %s | FileCheck %s > > ; ModuleID = 'hello.c' > target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64- > f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128- > n8:16:32:64-S128" > target triple = "x86_64-unknown-linux-gnu" > > @.str = private unnamed_addr constant [12 x i8] c"helloworld\0A\00", align 1 > > define i32 @main() nounwind uwtable { > entry: > %retval = alloca i32, align 4 > store i32 0, i32* %retval > %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([12 x i8]* > @.str, i32 0, i32 0)) > ret i32 0 > } > > declare i32 @printf(i8*, ...) > ; > > ;CHECK: main > ;CHECK: printf > /******test end*******/ > i run the example ok,now i what to check if the file llc ouput contain > a string "helloworld",so i add a sentence ";CHECK: {helloworld}" after > ";CHECK: printf".but it failed.why?Why do you check "{helloworld}" rather than "helloworld"? If you are not sure a string pattern does exist in result file, compile it manually and check the content before adding a CHECK to test it.> > yours, > changcheng > > > On Tue, Aug 28, 2012 at 12:38 PM, Triple Yang <triple.yang at gmail.com> wrote: >> You are welcome. >> >> /* example.c */ >> // RUN: clang %s -S -O0 -emit-llvm -o %t.ll >> // RUN: llc %t.ll -O0 -march=x86 -o %t.s >> // RUN: FileCheck < %t.s %s >> >> >> // CHECK: fct >> unsigned int fct(unsigned int n) { >> if(n>0) return fct(n-1)*n; >> else return 1; >> } >> /* end example.c */ >> >> >> /* lit.local.cfg */ >> config.suffixes = ['.c', '.cpp', '.ll'] >> >> targets = set(config.root.targets_to_build.split()) >> if not 'VPU' in targets: >> config.unsupported = True >> /* end lit.local.cfg */ >> >> >> 2012/8/28 Changcheng Wang <changcheng at multicorewareinc.com>: >>> hi,yang: >>> thanks for your help! >>> my net is so poor that i can not donwload your attachment. >>> would you like to paste here,or send to my other email:200005275 at 163.com? >>> >>> yours >>> >>> changcheng >>> >>> >>> >>> On Tue, Aug 28, 2012 at 11:43 AM, Triple Yang <triple.yang at gmail.com> wrote: >>>> Wang, >>>> >>>> Attachment is a simple example, you may put it in test/CodeGen, and run with >>>> >>>> llvm-lit C90 >>>> >>>> It worked ok in my llvm 3.2 devel. Let know if you run into any trouble. >>>> >>>> Regards. >>>> >>>> 2012/8/27 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>> hi,Yang: >>>>> if you can give me a examle,which check out a string(such as "abcd") >>>>> from a file(such as aaa.c) with fileCheck? >>>>> i tried to write it but failed. >>>>> >>>>> thanks for your help! >>>>> >>>>> best wished! >>>>> >>>>> changcheng >>>>> >>>>> On Wed, Aug 22, 2012 at 9:30 PM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>> I guess so. >>>>>> FileCheck has powerful extensions than just matching some strings so that >>>>>> it can support complex situations. >>>>>> >>>>>> 2012/8/22 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>> yeah,i see. >>>>>>> i thought FileCheck check if the same string in the two file,is it? >>>>>>> the file t.s maybe do not have the same string with %s,so FileCheck >>>>>>> perhaps give a fail. >>>>>>> i am not sure about it. >>>>>>> >>>>>>> On Wed, Aug 22, 2012 at 3:32 PM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>>>> 2012/8/22 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>>>> the example is more like what i need,it is so nice. >>>>>>>>> but,i am indefinite if "RUN: FileCheck < %t.s %s" can pass,i >>>>>>>>> understand that t.s was translate from t.ll,%s means read the local >>>>>>>>> source,are they the same? >>>>>>>> >>>>>>>> %t indicates a temporary file for output. ".s" is just a suffix I used >>>>>>>> conventionly. >>>>>>>> You can replace it with any string you like. >>>>>>>> >>>>>>>> See entry "tmp" in http://llvm.org/docs/TestingGuide.html#rtvars >>>>>>>> >>>>>>>>> >>>>>>>>> On Wed, Aug 22, 2012 at 1:55 PM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>>>>>> I did an experiment just now with a test case like: >>>>>>>>>> // RUN: clang %s -S -emit-llvm -o %t.ll >>>>>>>>>> // RUN: llc %t.ll -o %t.s >>>>>>>>>> // RUN: FileCheck < %t.s %s >>>>>>>>>> >>>>>>>>>> ... >>>>>>>>>> >>>>>>>>>> // CHECK: ... >>>>>>>>>> >>>>>>>>>> And it worked. >>>>>>>>>> >>>>>>>>>> It seems clang does not take stdin as its input, so "clang < %s" fails. >>>>>>>>>> Meanwhile, both "llc < %t.ll" and "llc %t.ll" work. >>>>>>>>>> >>>>>>>>>> 2012/8/22 Triple Yang <triple.yang at gmail.com>: >>>>>>>>>>> 2012/8/21 Triple Yang <triple.yang at gmail.com>: >>>>>>>>>>>> 2012/8/21 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>>>>>>>> Hi,Yang >>>>>>>>>>>>> thanks for your entire answer,i will do it follow you. >>>>>>>>>>>>> still another question puzzled me:i write a hello.c file like this: >>>>>>>>>>>>> >>>>>>>>>>>>> //RUN: llc -march=c < %s | FileCheck %s >>>>>>>>>>>>> #include"stdio.h" >>>>>>>>>>>>> >>>>>>>>>>>>> int main() { >>>>>>>>>>>>> printf ("Helloworld.\n"); >>>>>>>>>>>>> return 0; >>>>>>>>>>>>> } >>>>>>>>>>>>> >>>>>>>>>>>>> in fact, i want to thanslate it to a hello.ll file like this: >>>>>>>>>>>>> ;RUN: llc -march=c < %s | FileCheck %s >>>>>>>>>>>>> ....... >>>>>>>>>>>>> ;CHECK..... >>>>>>>>>>>>> >>>>>>>>>>>>> but,when i thanslate the hello.c with clang,the sentence "//RUN: llc >>>>>>>>>>>>> -march=c < %s | FileCheck %s" was treated as comment. >>>>>>>>>>>>> >>>>>>>>>>>>> it samed the method translating hello.c to hello.ll is wrong,isnot it? >>>>>>>>>>>> >>>>>>>>>>>> To translate a .c file to a .ll file, you should wirte, for example, >>>>>>>>>>>> clang -emit-llvm -S test.c -o test.ll >>>>>>>>>>>> >>>>>>>>>>>> And the corresponding command for regression test might be: >>>>>>>>>>>> ; RUN: clang < %s -emit-llvm -S | FileCheck %s >>>>>>>>>>> >>>>>>>>>>> We can write: >>>>>>>>>>> // RUN: clang < %s -emit-llvm -S >>>>>>>>>>> in a .c file to test clang. >>>>>>>>>>> >>>>>>>>>>> And if we use FileCheck, like: >>>>>>>>>>> // RUN: clang < %s -emit-llvm -S | FileCheck %s >>>>>>>>>>> make sure there is some "// CHECK:" in that file, or lit will report a failure. >>>>>>>>>>> >>>>>>>>>>> See utils/lit/lit/ExampleTests/Clang for more details. >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Regards. >>>>>>>>>>>> >>>>>>>>>>>> (PS. When you reply to this email, make sure you send a copy to >>>>>>>>>>>> llvmdev at cs.uiuc.edu) >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> thanks very much! >>>>>>>>>>>>> best wishes >>>>>>>>>>>>> >>>>>>>>>>>>> changcheng >>>>>>>>>>>>> >>>>>>>>>>>>> On Tue, Aug 21, 2012 at 10:46 AM, Triple Yang <triple.yang at gmail.com> wrote: >>>>>>>>>>>>>> Hi, changcheng, >>>>>>>>>>>>>> >>>>>>>>>>>>>> There are following steps to be taken to write a test case: >>>>>>>>>>>>>> 1. create a directory in test, say "test/XXX" >>>>>>>>>>>>>> 2. create a file named lit.local.cfg, which is a configuration file. >>>>>>>>>>>>>> The straightforward way is to copy an existed one, >>>>>>>>>>>>>> like "test/CodeGen/SPARC/lit.local.cfg". You might need make some >>>>>>>>>>>>>> modification on it. >>>>>>>>>>>>>> 3. create a file, say "example.ll" >>>>>>>>>>>>>> (The name of file does not matter, but the suffix of the file name >>>>>>>>>>>>>> DOES matter. See config.suffixes = [ ... ] in lit.local.cfg) >>>>>>>>>>>>>> for more details. >>>>>>>>>>>>>> example.ll includes normal content of LLVM IR, and the ";RUN ..." >>>>>>>>>>>>>> directives at the beginning of the file. >>>>>>>>>>>>>> 4. run all regression test cases with "make check", which includes >>>>>>>>>>>>>> above test case newly added. >>>>>>>>>>>>>> Or you might want to run just that case with "llvm-lit test/XXX" >>>>>>>>>>>>>> or "llvm-lit test/XXX/example.ll" >>>>>>>>>>>>>> llvm-lit resides in BUILD tree, distinguished from source tree and >>>>>>>>>>>>>> install tree. You can find it under >>>>>>>>>>>>>> your-build-tree/Release+Asserts/bin/ or >>>>>>>>>>>>>> your-build-tree/Debug+Asserts/bin/ or likewise, which depends on your >>>>>>>>>>>>>> build >>>>>>>>>>>>>> configuration. >>>>>>>>>>>>>> >>>>>>>>>>>>>> By the way, in the following ";RUN ..." directive >>>>>>>>>>>>>> ; RUN: llc < %s -march=x86 | FileCheck %s >>>>>>>>>>>>>> %s indicates current file under test. I guess the first %s stands for >>>>>>>>>>>>>> the input for llc, while the second and last %s specifies >>>>>>>>>>>>>> what to check using "; CHECK ..." directives since you write them down >>>>>>>>>>>>>> on exactly CURRENT file. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Hope it work for you. >>>>>>>>>>>>>> Regards. >>>>>>>>>>>>>> >>>>>>>>>>>>>> 2012/8/20 Changcheng Wang <changcheng at multicorewareinc.com>: >>>>>>>>>>>>>>> hi,all: >>>>>>>>>>>>>>> i really want to how to write a regression test case,but i do not find >>>>>>>>>>>>>>> out a entire document about it. >>>>>>>>>>>>>>> By reading LLVM Testing Infrastructure Guide and FileCheck - Flexible >>>>>>>>>>>>>>> pattern matching file verifier, i only have a idea,but it is not >>>>>>>>>>>>>>> enough for me to write a test case.i need more detail about how to >>>>>>>>>>>>>>> write a RUN:lines. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> thanks for you scan,wish your letter. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> best wishes, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> changcheng >>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>> LLVM Developers mailing list >>>>>>>>>>>>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>>>>>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> 杨勇勇 (Yang Yongyong) >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> 杨勇勇 (Yang Yongyong) >>>> >>>> >>>> >>>> -- >>>> 杨勇勇 (Yang Yongyong) >> >> >> >> -- >> 杨勇勇 (Yang Yongyong)-- 杨勇勇 (Yang Yongyong)