IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an
email to Administrator. User accounts are meant only to access repo
and report issues and/or generate pull requests.
This is a purpose-specific Git hosting for
BaseALT
projects. Thank you for your understanding!
Только зарегистрированные пользователи имеют доступ к сервису!
Для получения аккаунта, обратитесь к администратору.
Replaced the old version of the PTX compiler which used external tools and llvm::ExecuteAndWait with an internal implementation. The new incremental PTX compiler uses a modified version of the cling::Interpreter instance. The instance can process the PTX built-ins and generates LLVM IR. The LLVM IR is be compiled to PTX via an additional NVPTX backend implemented in the IncrementalCUDADeviceCompiler.
The new implementation has many advantages:
- it's much faster than the old version
- less error-prone because the ASTPrinter and some unnecessary cling transformations are avoided
- reduction of problems in searching for external tools (can be very complicated on HPC systems)
The IncrementalCUDADeviceCompiler is moved from the cling::IncrementalParser to the cling::Interpreter, because the second interpreter needs the input without wrappers or transformations.
- change CUDA to CUDAHost and add CUDADevice to the InvocationOptions
- in the PTX mode, some ASTTransformer will not be used, which are useful for the x86 mode
This is the final version of "printValue" discussion.
We agreed that printValue interface should be altered to ToString
interface, which can be invoked `gInterpreter->ToString(XYZ)`. (ToString is in TCling and toString is in Interpreter :D)
This patch contains:
- Implementation of toString in Interpreter.cpp
- Re-Implementation of ClingPrintValue to use ToString because I changed to use Evaluate some time ago.
- Removing of RVec version of printValue which wasn't used at all
- Fix test/vecops_rvec.cxx, printValue is never supposed to be called by a normal user.
This is the only way not to confuse the diagnostics engine of upgraded clang.
Also, this gives us a few advantages:
* We can compare more precisely the source locations of diagnostics;
* We can merge the code completion code path which works with file entries;
* We can rely better when specifying //expected-note-s in different files.
Also fix trying to report why compiler invocation failed when it was never attempted.
Add message about build being probably being configured incorrectly.
Signed-off-by: Vassil Vassilev <vvasilev@cern.ch>
Instead call it at the end of cling::createCI (that should probably change too).
clang::ApplyHeaderSearchOptions is a very heavy-weight function that does a lot
of work to determine and add system headers. More importantly it can also wind
up invalidating clangs internal cache making inclusion of files later impossible.
By using the lighter HeaderSearchOptions::AddSearchPath we not only avoid redoing
a lot of work that has been done, but can adjust the method in clang to avoid
cache invalidation so that calling Interpreter::AddIncludePath will actually
make the files in that path accessible to clang.
Signed-off-by: Vassil Vassilev <vvasilev@cern.ch>
AutoloadCallback: Implementing InterpreterCallbacks to attach the module to cling
The main focus is on overriding LookupObject so that the information about
lookup failures are obtained from clang.
The type of the name is not taken into consideration for now.
TagManager: To manage and lookup information from various sorts of tag files.
Currently a TagManager object is owned by the callback system.
This may change in future.
Wrapper: As a base class for handling particular types of tagfiles.
The TagManager maintains a container of Wrappers.
CtagsFileWrapper: Implementing a wrapper for ctags.
This class is responsible for generating a tagfile from a given path or list of files.
It also performs lookups in the file generated by it.
And a few simple file system utils to complement llvm::sys::fs and path utilities
Dump cling::Value within setNoAlloc routines because this is its lifespan,
otherwise gets deleted if nobody requested it. I.e it was created only for
value printing purposes.
Dump cling::Value outside setWithAlloc because the actual value is not put inside
until the call to ::new finishes, thus we need to do it outside, i.e in EvaluateInternal.
Switch on the ValueExtraction synthesizer even when 'just' value printing. We
depend on it. Must be factored out properly in one class.
Stop attaching the value printing template magic, which didn't work in some cases.
Update the ref file, because now there is better type information.
Adapt the user-defined printout functions (TDatime).