Commit Graph

51 Commits

Author SHA1 Message Date
Evgeny Mankov 1776ff55d3 [HIPIFY] Add a compatibility for CharSourceRange if LLVM < 7
[ROCm/hip commit: c87ab05fc6]
2019-11-06 14:30:39 +03:00
Evgeny Mankov 5a9c8168c1 [HIPIFY][#1409] Fix for kernel launch macro expansion
+ Add a corresponding test kernel_launch_01.cu
+ Add isBefore() check to avoid crash on Replacement with negative length

TODO:
+ Compatibility with former LLVM versions
+ More complicated kernel launch tests


[ROCm/hip commit: 976f8e8bf6]
2019-11-05 14:00:13 +03:00
Evgeny Mankov 55e2ef4c7a [HIPIFY][CUB][#1460] Add "using namespace cub" translation support
+ Add cub_03.cu


[ROCm/hip commit: 98874c0e7f]
2019-10-18 18:51:40 +03:00
Evgeny Mankov 60c5f0a6c7 [HIPIFY][CUB][#1460] Add cub:: namespace support in TemplateInstantiation of cudaLaunchKernel
+ Update cub_02.cu test accordingly


[ROCm/hip commit: edfd05a86d]
2019-10-16 19:02:13 +03:00
Evgeny Mankov 187eeb86bc [HIPIFY] Refactor a couple of matcher functions
+ Separate out GetSubstrLocation function for finding substr SourceLocation in a given SourceRange


[ROCm/hip commit: 809a67a4f6]
2019-10-16 13:43:56 +03:00
Evgeny Mankov dcbe9432bd [HIPIFY][CUB][#1460] Implement cubFunctionTemplateDecl matcher
+ Add cub_02.cu test
+ Partial fixes #1460


[ROCm/hip commit: 6960574850]
2019-10-16 13:08:11 +03:00
Evgeny Mankov 8456642b3d [HIPIFY] HipifyAction code clean-up
[ROCm/hip commit: c0f62157f9]
2019-10-14 18:08:29 +03:00
Evgeny Mankov 3deccebb07 [HIPIFY][CUB] Initial support (hipify-clang only)
+ Add one matcher (will be more)
+ Update Maps and Statistics
+ Add cub_01.cu unit test
+ Update lit harness to support standalone CUB
+ Update README.md
+ Update hipify-perl (only CUB header is supported for now)

[IMPORTANT]
clang (and hipify-clang) works correctly only with official NVLabs version on GitHub.
Compilation of CUB from official CUDA release has conflicts with THRUST.
Thus, to compile CUB sources, option "-I" should be specified to the cloned CUB from NVLAB on GitHub.


[ROCm/hip commit: 277d3b8369]
2019-10-14 11:55:55 +03:00
Evgeny Mankov eab4a41336 [HIPIFY] Return to wrapping with HIP_KERNEL_NAME(...) macro of a template instantiation kernel launch
[REASON]

1. hip-clang is fine with the templated kernel launch, brackets are unneeded: HIP_KERNEL_NAME(...) __VA_ARGS__
2. HCC is not, thus: HIP_KERNEL_NAME(...) (__VA_ARGS__)

[TODO] Clean-up entirely kernel name wrapping when HCC is finally obsolete.

+ Update perl generation, hipify-perl, and affected tests accordingly.


[ROCm/hip commit: 6bb9913e8a]
2019-10-02 16:01:07 +03:00
Evgeny Mankov 042d68e5fb [HIPIFY] Reconcile transformation (statistics) types between hipify-clang and hipify-perl
+ Update hipify-perl accordingly


[ROCm/hip commit: 76a439f4c0]
2019-09-29 17:33:37 +03:00
Evgeny Mankov ca15d193e8 [HIPIFY][#1439] Add reinterpret_cast to args of some functions
+ Perl part of [#1458]
+ Affected functions: hipFuncSetCacheConfig, hipFuncGetAttributes
+ Implement function generateHostFunctions() in hipify-clang for that purposes
+ Update hipify-perl accordingly


[ROCm/hip commit: 9d1d4b78e3]
2019-09-25 18:53:17 +03:00
Evgeny Mankov a7e5c3a600 [HIPIFY] HipifyAction refactoring
+ Merge of cudaSymbolFuncCall and cudaReinterpretCastArgFuncCall matchers into a single cudaHostFuncCall matcher
+ More const std::string declarations
+ Formatting


[ROCm/hip commit: 84baa83a25]
2019-09-24 10:33:51 +03:00
Evgeny Mankov 1eff176c03 [HIPIFY][#1439] Add reinterpret_cast to args of some functions
+ Affected functions: hipFuncSetCacheConfig, hipFuncGetAttributes
+ Add a corresponding Matcher cudaReinterpretCastArgFuncCall
+ Add reinterpret_cast.cu test

TODO: Do the same for hipify-perl


[ROCm/hip commit: dd6a92afb7]
2019-09-24 09:44:17 +03:00
Evgeny Mankov cdf0596e6d [HIPIFY][#1435][perl] Add HIP_SYMBOL wrapper to the templated Device Symbol argument of the following functions:
cudaMemcpyToSymbol, cudaMemcpyToSymbolAsync, cudaGetSymbolSize, cudaGetSymbolAddress, cudaMemcpyFromSymbol, cudaMemcpyFromSymbolAsync

+ Perl part of [#1441]
+ Implement function generateSymbolFunctions() in hipify-clang for that purposes
+ Update hipify-perl

TODO: Eliminate dim3() issue in hipify-perl as well


[ROCm/hip commit: 1b989bcb8d]
2019-09-21 07:33:17 +03:00
Evgeny Mankov 0504e85f02 [HIPIFY][#1435] Add HIP_SYMBOL wrapper to the templated Device Symbol argument of the following functions:
cudaMemcpyToSymbol, cudaMemcpyToSymbolAsync, cudaGetSymbolSize, cudaGetSymbolAddress, cudaMemcpyFromSymbol, cudaMemcpyFromSymbolAsync

+ Add a corresponding cudaSymbolFuncCall matcher.
+ Add device_symbols.cu test for the above 6 functions, update existed.
+ Fix dim3() type cast issue, update affected tests.

TODO: Do the same in hipify-perl


[ROCm/hip commit: 3722d5b4b9]
2019-09-19 19:33:42 +03:00
Evgeny Mankov b1cf1a21d6 [HIPIFY] Add supported device functions (from math_functions.h)
+ [perl] Add generation of sub countSupportedDeviceFunctions
+ [FIX] Do not perform any replacement for supported device functions
+ [perl] Sync hipify-perl accordingly


[ROCm/hip commit: 042c125601]
2019-09-17 16:17:28 +03:00
Evgeny Mankov ba10db6fc6 [HIPIFY][#1400] Fix Template Instantiation kernel launch (clang & perl)
+ Enclose template instantiation kernel calls into round brackets, leave regular kernel names unchanged (hipify-perl doesn't handle cases with macros).
+ Fix corresponding tests.

PS. hipify-perl couldn't handle correctly the following cases due to macros expansion disability, thus hipify-clang should be used instead:

#define KERNEL_NAME_MACRO axpy<float>
#define KERNEL_CALL_MACRO axpy<float><<<1, 2>>>
#define KERNEL_ARG_LIST_MACRO a, x, y

// CUDA:
KERNEL_NAME_MACRO<<<1, 2>>>(KERNEL_ARG_LIST_MACRO);
KERNEL_CALL_MACRO(KERNEL_ARG_LIST_MACRO);

// hipify-perl:
hipLaunchKernelGGL(KERNEL_NAME_MACRO, dim3(1), dim3(2), 0, 0, KERNEL_ARG_LIST_MACRO);
KERNEL_CALL_MACRO(KERNEL_ARG_LIST_MACRO);

// hipify-clang:
hipLaunchKernelGGL((KERNEL_NAME_MACRO), dim3(1), dim3(2), 0, 0, KERNEL_ARG_LIST_MACRO);
hipLaunchKernelGGL((axpy<float>), dim3(1), dim3(2), 0, 0, KERNEL_ARG_LIST_MACRO);


[ROCm/hip commit: 56ab105e9d]
2019-09-10 15:59:06 +03:00
Evgeny Mankov 17b734afde [HIPIFY] Add device functions support
+ Add a corresponding matcher cudaDeviceFuncCall to match only (__device__ or __global__) and not __host__ functions.
+ Add a corresponding device functions mapping:
  only unsupported are listed, cause supported are exactly the same as of CUDA and do not need transformation;
  make FindAndReplace for device functions separated from host API calls.
+ Add a test to distinguish device functions and user-defined.


[ROCm/hip commit: 6602fadc16]
2019-09-06 18:34:12 +03:00
Evgeny Mankov e78eb9bb47 [HIPIFY][#207][fix] Translate all preprocessor's conditional blocks
+ 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


[ROCm/hip commit: 24be21495d]
2019-08-28 21:17:35 +03:00
Evgeny Mankov 728b2f5843 [HIPIFY][fix][#211] Taking into account include guard controlling macro
...while including HIP main header file, which is inserted now after #indef controlling macro, or after #pragma once, if it's occurred earlier.

+ Add a couple of unit tests.
ToDo: Check backward compatibility on older clang versions.


[ROCm/hip commit: 25075729f9]
2019-08-02 16:46:45 +03:00
Evgeny Mankov 3ad30304a4 [HIPIFY][#1239] Fix an assert
[ROCm/hip commit: d19fcbcde4]
2019-07-22 22:13:54 +03:00
Evgeny Mankov 6ba67c4a81 [HIPIFY] Add device texture fetch functions support
+ Add a corresponding reverse engineered sample tex2dKernel with texture template


[ROCm/hip commit: c7a2b4e492]
2019-05-23 12:47:08 +03:00
Evgeny Mankov 2472ece71d [HIPIFY][fix][#1109] Do not preserve extern __shared__ for IncompleteArrayType
+ Update tests accordingly


[ROCm/hip commit: fa3dda9107]
2019-05-15 20:05:56 +03:00
Evgeny Mankov 88da4a036f [HIPIFY][RAND] revise
+ add missing functions
+ add minimum rocRAND support
+ updated CURAND_API_supported_by_HIP.md


[ROCm/hip commit: 7ba8c440e6]
2019-02-08 17:54:28 +03:00
Evgeny Mankov 32bbedaa55 [HIPIFY][BLAS] Restrict hipification to 'ROC' to BLAS library only
+ Add utility functions isToRoc, isHipUnsupported, isRocUnsupported, isUnsupported


[ROCm/hip commit: e93fe78648]
2019-02-07 13:17:05 +03:00
emankov 13126143ed [HIPIFY] Add the legal right comment to all the sources
[ROCm/hip commit: fcaf954998]
2018-12-20 18:47:57 +03:00
Evgeny Mankov 3621afd4e6 [HIPIFY] Initial support of translation to ROCm
+ 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


[ROCm/hip commit: c5ed25da22]
2018-12-06 21:52:54 +03:00
emankov f5f06217a8 [HIPIFY][SPARSE] Initial support
[ROCm/hip commit: 30c387a811]
2018-11-20 17:58:05 +03:00
Evgeny Mankov 517ba1c4c1 [HIPIFY][LLVMCompat] support of upcoming LLVM 8.0
+ StringRef issue, which is finally moved to LLVM from Clang
+ Renamed getBeginLoc() and getEndLoc() resolution for Expr and TypeLoc classes
+ Support all the previous LLVM versions via LLVCompat


[ROCm/hip commit: aad5858cb1]
2018-11-16 01:23:25 +03:00
Evgeny Mankov 96fefc34b4 [HIPIFY][fix][#739] Fix garbage after replacements
[Issue] https://github.com/ROCm-Developer-Tools/HIP/issues/739
[Resolution] Always use an std::string not a clang::StringRef for replacement

P.S. Occurred only on Linux, on Windows works fine.


[ROCm/hip commit: a8e6033aa3]
2018-10-30 19:35:59 +03:00
Evgeny Mankov 7470b5b694 [HIPIFY] Modify HIP types to conform to CUDA's ones
[ROCm/hip commit: f83eabfa9e]
2018-10-29 20:51:25 +03:00
Evgeny Mankov 0fef14487c [HIPIFY] Split CUDA2HIP map into a number of maps based on API type
[Reasons]
+ Simplify the support
+ Optimize compilation and code generation time

[Additionally]
+ Update minimum required version of cmake
+ Fix MSVC compile options force update


[ROCm/hip commit: 5d1255272b]
2018-10-23 00:00:10 +03:00
Evgeny Mankov 5b192ed119 [HIPIFY] Code cleanup and formatting
[ROCm/hip commit: ee3a5cc722]
2018-10-15 15:27:37 +03:00
Evgeny Mankov 37d047b454 [HIPIFY][Complex] Add cuComplex support
+ Add API_COMPLEX support (data types and functions)
+ Add cuComplex_API_supported_by_HIP.md
+ Add cuComplex_Julia.cu test
+ Update README.md


[ROCm/hip commit: 368977f75b]
2018-08-08 18:34:57 +03:00
Evgeny Mankov 2122770861 [HIPIFY][FFT] Add cuFFT support
+ Add API_FFT support (data types and functions)
+ Add CUFFT_API_supported_by_HIP.md
+ Add simple_cufft.cu test
+ Update README.md


[ROCm/hip commit: 70cfa5e53c]
2018-07-31 22:25:48 +03:00
Evgeny Mankov 51fff4049a [HIPIFY] Current trunk LLVM 7.0 initial support
Tested with CUDA 8.0, 9.0, 9.1 and 9.2.

Only 8.0 works with LLVM 7.0, due to the changes in LLVM trunc since released 6.0, which works fine with CUDA 8.0 and 9.0.

So, nothing to do in hipify-clang, hope that all the CUDA 9.x related issues will be fixed in 7.0 release.


[ROCm/hip commit: 433e172776]
2018-07-11 20:15:49 +03:00
Evgeny Mankov 057b13fc4a [HIPIFY] Initial cuDNN support
- based on https://github.com/ROCmSoftwarePlatform/hipDNN.
- lit testing was supplemented with CUDA_DNN_ROOT_DIR for cuDNN testing.
- single cuDNN test was added.


[ROCm/hip commit: fe421c89b2]
2018-05-03 11:33:40 +03:00
Evgeny Mankov 540fc92b1c [HIPIFY] undo apply .clangformat to HIPIFY source files
[ROCm/hip commit: 8499e79e2b]
2018-04-23 20:22:15 +03:00
Maneesh Gupta 4f42ee762d Apply .clangformat to all repo source files
Change-Id: I7e79c6058f0303f9a98911e3b7dd2e8596079344


[ROCm/hip commit: 1ba06f63c4]
2018-03-12 11:29:03 +05:30
Evgeny Mankov e455192444 [HIPIFY] InclusionDirective refactoring
Due to support of cuRAND headers.

+ compound test on all headers is added;
+ missing entities are added with updating the doc;
+ a couple cuRAND tests are added (https://github.com/ROCmSoftwarePlatform/rocRAND/tree/master/benchmark):
  - the following CUDA entities are still unsupported by hipRAND:
      curandMakeMTGP32Constants
      curandMakeMTGP32KernelState
      curandGetDirectionVectors32
      curandDirectionVectorSet_t
      CURAND_DIRECTION_VECTORS_32_JOEKUO6
      curandStateSobol64_t
      curandStateScrambledSobol64_t
      curandGenerateLongLong
  - and the following - by HIP:
      cudaRuntimeGetVersion
  - those entities are handled by CHECK-NOT directive for now.


[ROCm/hip commit: 02e23c4d87]
2018-01-29 18:33:47 +03:00
Evgeny Mankov 496111adc3 Merge pull request #340 from emankov/master
[HIPIFY][fix] Fix PragmaDirective

[ROCm/hip commit: fb1012a4b8]
2018-01-24 18:09:54 +03:00
Evgeny Mankov 369f3aa9fa [HIPIFY][fix] CUDA and cuBLAS main headers correct handling
[ROCm/hip commit: 600d5d7c06]
2018-01-23 23:43:36 +03:00
Evgeny Mankov fda3893ee3 [HIPIFY][fix] Fix PragmaDirective
File location have to be verified, otherwise location of the first found '#pragma once' in any included header even system will be erroneously handled, which might lead to attempt to including hip_runtime.h in it.


[ROCm/hip commit: 77f807b597]
2018-01-23 23:06:55 +03:00
Evgeny Mankov e09ba44b16 Update HipifyAction.cpp
dead code eliminate

[ROCm/hip commit: e54d9f3df0]
2018-01-16 15:08:08 +03:00
Evgeny Mankov 0e8da085bf [HIPIFY][fix][#211] Algorithm for explicit insert of hip include directive
If in source CUDA file main header (cuda_runtime.h or cuda.h) is not presented, corresponding HIP main header (hip_runtime.h) should be explicitly included in output hipified file.

[Algorithm]
1. If #pragma once is presented, HIP main header should be placed just after it;
2. Otherwise if any other (not CUDA main) header is presented, HIP main header should be placed just before it;
3. Otherwise HIP main header should be placed in the beginning of output file.

P.S.
There might be one more situation when #ifndef #define ... #endif guard for the entire file is presented (make sense for *.h, *.hpp, *.cuh files). In this case HIP main include should be placed just after such #ifdef, or after #pragma once, if it is also presented. This situation will be handled in a separate change.


[ROCm/hip commit: 09655a0853]
2018-01-15 21:05:05 +03:00
Evgeny Mankov 217d7031a4 [HIPIFY][fix][#306] Code improve
[ROCm/hip commit: 08662fba73]
2018-01-10 21:26:05 +03:00
Evgeny Mankov 263cacc1c2 [HIPIFY][FIX][#306] Eliminate second cuda main include directive
// hipified to #include<hip/hip_runtime.h>
#include<cuda.h> // 1st cuda main include (Driver API)
// to eliminate
#include<cuda_runtime.h> // 2nd cuda main include (Runtime API)

HIP has one header hip_runtime.h for both CUDA APIs, thus second cuda main include directive is eliminated entirely.


[ROCm/hip commit: 7e7cfa10cc]
2017-12-26 20:54:54 +03:00
Evgeny Mankov 3233d633da [HIPIFY] Remove cudaBuiltin matcher
[ROCm/hip commit: 5d92a6c252]
2017-12-06 20:22:14 +03:00
Evgeny Mankov eefead5a1c [HIPIFY] Disable cudaBuiltin matcher.
As HIP has started to support vanilla CUDA syntax for threadIdx, blockIdx, blockDim and gridDim.
Other CUDA builtins are not tracked for now.


[ROCm/hip commit: 71d2fb20c8]
2017-12-05 20:28:51 +03:00
Chris Kitching 096136750c Use proper clang diagnostics for printing warnings
Much pretty. Very wow

This gives users all the usual power when it comes to manipulating
clang diagnostics. People can pass -Werror can have hipify fail if
it doesn't completely translate a file, for example. Much nicer
than reinventing the wheel.


[ROCm/hip commit: 6b767a59ba]
2017-11-13 20:58:55 +00:00