+ Get rid of --o-perl-map option for Perl output filename: the output name now is always hipify-perl
+ Option --o-perl-map-dir renamed to --o-hipify-perl-dir
Cmd example for generating hipify-perl script to the particular directory:
hipify-clang -perl --o-hipify-perl-dir=../../bin
+ Start to translate preprocessor's false conditional blocks too:
based on clang's https://reviews.llvm.org/D66597;
available only starting from LLVM 10.0 or trunk.
+ Option -skip-excluded-preprocessor-conditional-blocks for skipping excluded conditional blocks:
the default behavior for hipify-clang built with LLVM < 10.0;
false by default for hipify-clang built with LLVM 10 or trunk.
+ Add 4 preprocessor unit tests, 2 of which are LLVM 10.0 only
+ Update couple of existing tests by setting -skip-excluded-preprocessor-conditional-blocks option:
update lit testing accordingly
+ Fixes the following assert in debug version:
Assertion failed: (S.empty() || S[0] != '-') && "Option can't start with '-", file C:\GIT\LLVM\trunk-for-submits\llvm-project\llvm\lib\Support\CommandLine.cpp, line 440
+ DashDash option left declared in order to be listed in help.
+ Add option -print-stats-csv to dump statistics to CSV file
+ If -o-dir is specified, CSV file will be dumped there
+ Generate 1 summary file sum_stat.csv in case of multiple sources
+ Only a generation of transformation map of CUDA entities is implemented.
+ 2 hipify-clang options are added: -python, -o-python-map-dir.
+ Explicitly set -roc option for cuda_to_hip_mappings.py generation.
+ Generated file already might be used by pytorch team.
+ Only a generation of transformation map of CUDA entities supported by HIP is implemented.
+ 3 hipify-clang options are added: -perl, -o-perl-map, -o-perl-map-dir.
+ OptionsParser mode is changed from OneOrMore to Optional to support hipify-perl generation without actual hipification.
+ Add explicit control of source files specification absence in case of no perl generation.
+ '-D' might be set as hipify-clang option (before separator '--' or without specifying separator at all);
+ '-D' as a clang option might be specified as well (after options separator '--');
+ All defines specified as hipify-clang defines (before options separator '--') will be set after clang's ones and will redefine the same clang's ones.
+ '-I' might be set as hipify-clang option (before separator '--' or without specifying separator at all);
+ '-I' as a clang option might be specified as well (after options separator '--').
+ Append '--' to the end of hipify-clang options in case of its absence.
[Reason]
+ Avoid the necessity for the user in JSON compilation database specification.
Otherwise:
Error while trying to load a compilation database:
Could not auto-detect compilation database for file "test.cu"
Though the hipification will be performed correctly without JSON database.
Repeats clang's '--cuda-path' option.
[Reason]
In case of absence of any other clang's options setting '-cuda-path' allows not to specify separator '--' before clang's '--cuda-path'.
+ Tests and scripts are updated accordingly.
Option -o-dir for output directory:
+ if not specified source file(s) directory is used;
+ creates the directory if the directory doesn't exist (only one level in a tree);
+ if -o and -o-dir both are specified the hipified file is placed to "-o-dir" + "-o";
+ reports an error in case of a wrong directory specified, in case of necessity of creating a tree of subfolders, or in case of a filename specified.
1. Option -temp-dir for temporary directory:
+ if not specified system temp is used;
+ creates the directory if the directory doesn't exist (only one level in a tree);
+ reports an error in case of a wrong directory specified, in case of necessity of creating a tree of subfolders, or in case of a filename specified.
2. Option -save-temps for preserving temporary files:
+ if specified temporary files are not being deleted from system temps and user temps as well.
3. Work with files in terms of calculated absolute paths by collapsing all '.' and '..' patterns, resolving symlinks and expanding '~' expression to the user's home directory:
+ to produce correct include paths;
+ to avoid possible errors on file routines.
+ Option '-roc' is added to translate to ROCm instead of HIP
+ Update hipification mechanism accordingly
+ Populate all translation maps with additional field for ROCm identifiers
+ There are 4 degrees of CUDA support now: full support, only by HIP, only by ROCm, unsupported
Most of what hipify does is really just replacing CUDA idenitifers
with HIP ones. CUDA function calls, preprocessor macro calls,
enum references, types, etc.
This is problematic: calls/types/enum-refs require name resolution
for the AST matcher to work. This fails in the presence of code
deleted by the preprocessor, and in two-pass template compilation.
Instead, we can simply hook the lexer and have it rewrite the
identifiers for us.
This approach means identifier transformations will work correctly
regardless of where they appear (and we get to delete lots of code)
- Fixes#260
- Helps a bit with #207 - it will still fail to translate kernel
calls in preprocessor-ignored code, but everything except kerel
launches should translate correctly now, even in
preprocessor-deleted code.