[cfe-dev] question regarding the C++ test case under LLVM test

Lin, Jin via cfe-dev cfe-dev at lists.llvm.org
Tue Sep 20 15:15:57 PDT 2016



-----Original Message-----
From: Jonathan Roelofs [mailto:jonathan at codesourcery.com] 
Sent: Tuesday, September 20, 2016 2:51 PM
To: Lin, Jin <jin.lin at intel.com>; cfe-dev at lists.llvm.org
Subject: Re: [cfe-dev] question regarding the C++ test case under LLVM test



On 9/20/16 3:43 PM, Lin, Jin wrote:
>
>
> -----Original Message----- From: Jonathan Roelofs 
> [mailto:jonathan at codesourcery.com] Sent: Tuesday, September 20, 2016
> 1:18 PM To: Lin, Jin <jin.lin at intel.com>; cfe-dev at lists.llvm.org
> Subject: Re: [cfe-dev] question regarding the C++ test case under LLVM 
> test
>
>
>
> On 9/20/16 12:22 PM, Lin, Jin via cfe-dev wrote:
>> Hi,
>>
>>
>>
>> I would like to have the following test case only running under Linux 
>> instead of Windows. Can someone shed me the light on how to make it 
>> work?
>>
>>
>> The second question is on how to modify the RUN command to run it 
>> under windows.  If clangxx is used, the dirver-mode is set to g++.
>> I have to specify the driver mode to be msvc. Please note that the 
>> test caseI has header file so that I cannot simply use clang_cc1.
>
> The RUN command doesn't do what you think it does. The RUN line you've 
> got just runs the compiler, and checks the IR that comes out of it for 
> particular patterns (using FileCheck). However, it seems like you're 
> asking about how to *execute* a testcase... In general, clang tests 
> should not be execution tests. Rather, they should only test codegen, 
> and codegen should be the same no matter what the host is. There are a 
> few exceptions here and there where host-specific functionality needs 
> to be tested, but codegen is not one of them.
>
>
> ************** I used "llvm-lit -v" to test my test case. So I know 
> exactly what the script is. I am not asking to execute the test case.
> In fact, what I ask for is to compile the test case and emit the LLVM 
> IR under Linux and Windows.

Sorry for the misunderstanding.

> The difference of this test file from
> other files in the directory clang/test  is that the test file 
> includes the header file. My point is, with different OS, the header 
> file might be different.

Even with the same OS, the header might be different (see my "p.s." from below).

Your best bet is to write the minimal version of std::vector that you need to test the functionality you're trying to test, and have it inline in your testcase.... depending on the host environment via #include's is an anti-pattern in clang's testsuite.

I think a better solution is to extend the utility llvm-lit to process the -target  option. If the target option and the host match, the script will be executed. Otherwise just ignore the test case. What do you think?

Thanks,

Jin


Jon

>
> Script: -- clang --driver-mode=g++   -target
> x86_64-unknown-linux-gnu   -O3
> ./llvm/tools/clang/test/CodeGen/std-container-ptr.cpp  -Xclang
> -disable-llvm-optzns   -emit-llvm -S -o - | FileCheck
> ./llvm/tools/clang/test/CodeGen/intel/std-container-ptr.cpp
>
>
> Jon
>
>>
>>
>>
>> Thanks,
>>
>>
>>
>> Jin
>>
>>
>>
>> FILE
>>
>> // RUN: %clangxx  -target  x86_64-unknown-linux-gnu  -Xclang 
>> -fintel-compatibility -O3 %s  -Xclang -disable-llvm-optzns -emit-llvm 
>> -S -o - | FileCheck %s
>>
>>
>>
>> // Check that llvm.intel.std.container.ptr intrinsic is generated.
>>
>> //
>>
>> #include <vector>
>
> p.s. you probably want to expand this ^ out so that your testcase 
> doesn't depend on the host environment. Rhetorical question: what 
> happens to your testcase if the host's <vector> comes from libstdc++ 
> vs if it comes from libc++?
>
>>
>> #define CONST_VECSIZE 2050
>>
>>
>>
>> float TIME,RESULT;
>>
>> std::vector< std::vector<float> > a(CONST_VECSIZE);
>>
>> std::vector< std::vector<float> >
>> b(CONST_VECSIZE),c(CONST_VECSIZE);
>>
>> extern void foo(std::vector< std::vector<float> > *);
>>
>> void test_vector()
>>
>> {
>>
>> int i, j, k;
>>
>>
>>
>>
>>
>> for(i=0;i<CONST_VECSIZE;i++)
>>
>> for(k=0;k<CONST_VECSIZE;k++)
>>
>> for(j=0;j<CONST_VECSIZE;j++)
>>
>> c[i][j] = c[i][j] + a[i][k]* b[k][j];
>>
>>
>>
>> }
>>
>> // CHECK:  %{{.*}} = call %"class.std::vector.0"** 
>> @"llvm.std.container.ptr.p0p0class.std::vector.0"(%"class.std::vector.
>>
>>
0"**
>> %{{.*}})
>>
>>
>>
>> _______________________________________________ cfe-dev mailing list 
>> cfe-dev at lists.llvm.org 
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>
> -- Jon Roelofs jonathan at codesourcery.com CodeSourcery / Mentor 
> Embedded
>

--
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded


More information about the cfe-dev mailing list