clang¶
The NEC LLVM-IR Vectorizer uses the clang as front-end, so non-architectural options and predefined macros of the clang are available. This chapter is specialized for the NEC LLVM-IR Vectorizer.
Synopsis¶
clang -target ve-linux -fnvec --nvec-path=<directory> [clang options] [llvm-vec options] filename
Example of compiling and linking a C source file.
$ clang -target ve-linux -fnvec a.c
Example of compiling and linking with llvm-vec option (-faggressive-associative-math).
$ clang -target ve-linux -fnvec -faggressive-associative-math a.c
Description¶
The clang inputs a C/C++ source file, and outputs LLVM-IR source codes for the NEC LLVM-IR Vectorizer.
Options¶
- -target <value>¶
- Generates code for the given target. Specifies ve-linux as the target when using the NEC LLVM-IR Vectorizer. 
- -fnvec¶
- Enables the NEC LLVM-IR Vectorizer. 
- --nvec-path=<directory>¶
- Specifies installation directory for the NEC LLVM-IR Vectorizer. 
Predefined Macros¶
The following predefined macros are added.
- __ve, __ve__¶
- Always defined as 1. 
Compiler Directives¶
The following Compiler Directives are supported.
- [no]advance_gather 
- [no]assume 
- gather_reorder 
- ivdep 
- [no]list_vector 
- [no]lstval 
- move / move_unsafe / nomove 
- nofma 
- [no]packed_vector 
- shortloop 
- [no]sparse 
- [no]vector 
- [no]verror_check 
- [no]vob 
- [no]vovertake 
- [no]vwork 
These are placed immediately before a for, while, do-while, or c++11 range-based for loop like #pragma unroll. For details on compiler directives, see C/C++ Compiler User’s Guide in documents.
Remarks¶
- The default optimization level is changed to -O1. 
- Clang for NEC LLVM-IR Vectorizer is Reference Implementation of VE. There is no quality guarantee.