İşleme Grafiği

1904 İşleme

Yazar SHA1 Mesaj Tarih
Chris Kitching e3338fe5a4 hipify does not add the hipLaunchParm option any more
This was removed a while ago - seems like it uses a different
variant of the launch kernel function now, so this is redundant.


[ROCm/hip commit: b412802c66]
2017-10-27 19:39:41 +01:00
Chris Kitching fd656a0fbb Use cmake's builtin mechanism for handling library locations
See [the documentation](https://cmake.org/cmake/help/v3.0/command/find_package.html)
for exactly how the search procedure works. If you want to use an
LLVM from a specific location, use CMAKE_PREFIX_PATH as normal.

No longer do we have a nonstandard HIPIFY_CLANG_LLVM_DIR variable
for people to learn about.


[ROCm/hip commit: 8fefc6a2b7]
2017-10-27 19:39:40 +01:00
Chris Kitching 1461c69757 Move the "LLVM found" print adjacent to the find_package call
Very surprising that LLVM's finder module doesn't print this
itself like _literally every other finder module_. Blarg.


[ROCm/hip commit: 92c90a7068]
2017-10-27 19:39:40 +01:00
Chris Kitching cc1bc495a0 We no longer rely on HIPIFY_CLANG_LLVM_DIR to disable hipify-clang
Since there's now an option for toggling hipify-clang, omitting the
path is no longer something we need to check for. We'll still
abort if LLVM isn't found, due to `REQUIRED`.


[ROCm/hip commit: c60c8d417e]
2017-10-27 19:39:40 +01:00
Chris Kitching d92f3c8d76 Don't attempt to find test dependencies if tests are disabled
And while we're at it, introduce a handy program-finder macro


[ROCm/hip commit: 921ff4c8a3]
2017-10-27 19:39:40 +01:00
Chris Kitching b61c4a241f Use add_dependencies to avoid duplication of pkg_hip_base
[ROCm/hip commit: 56b4222043]
2017-10-27 19:39:40 +01:00
Chris Kitching 7947e406c7 Make BUILD_HIPIFY_CLANG a cmake option
Instead of deciding whether to build hipify-clang based on
the presence of an LLVM path on the command line, have an
explicit option.

Do we want this default-on or default-off? I've defaulted it to
on for now, but maybe we want the opposite?


[ROCm/hip commit: a4ecd4eb31]
2017-10-27 19:39:39 +01:00
Evgeny Mankov 99d43e1e6a Merge pull request #213 from ChrisKitching/simplify
[HIPIFY] Simplify (and accelerate) hipification of CUDA type identifiers

[ROCm/hip commit: 3bacb69e20]
2017-10-26 19:17:01 +03:00
Kent Knox f6b4db7dd5 Update container to newer cuda driver and sdk 9.0
[ROCm/hip commit: 160d92af20]
2017-10-25 16:14:32 -05:00
Chris Kitching 641f7ed8f1 Don't use now-defunct cmake variable in lit test config
[ROCm/hip commit: 59071b895e]
2017-10-24 20:52:51 +01:00
Chris Kitching 5092f3f184 Refactor cudaCall to prefer early return to deep nesting
Sorry for the invasive refactor, but this was making reasoning
about this function more difficult.


[ROCm/hip commit: 778d6827f9]
2017-10-24 20:38:49 +01:00
Chris Kitching 22e7c4ebfc Split the giant lookup table into 3 smaller ones
Instead of having a single, enormous LUT for all CUDA names, let's
have separate ones for different types of entity. We often know
that we're looking at a typename, or a function name, or a macro
name - so we can be more efficient (and resilient to name
collisions) by having smaller lookup tables for each of those
classes of entity).

Here we start that off by having three LUTs:
- Header names
- Type names
- Everything else

Future work could usefully split "everything else" into:
- enum values
- macro names
- function names
- everything else

It's worth noting that the "needs new matcher" todos I delete here
were actually resolved with the previous commit. It no longer
naively searches for things that start with "cu*" - it will find
exactly those things that are present in our lookup tables.


[ROCm/hip commit: 695a1eb059]
2017-10-24 20:38:49 +01:00
Chris Kitching 1cf0c75c49 One matcher for type expressions to rule them all
Previously, there were different AST matchers for each
language construct that contains a type reference, and custom
logic to perform the transformation within each of those
structures.

Since the transformation in all such cases was only replacing
CUDA types with hip ones, we can instead use an AST matcher
that finds and updates the type references directly.
This simplifies the program considerably, and it won't fail
when it finds a language feature (or complicated type expression)
that nobody wrote custom logic for yet.


[ROCm/hip commit: a1d8340314]
2017-10-24 20:38:49 +01:00
Chris Kitching 0c0ca79c1c Make control flow less insane
`while(false)` is certainly a bold choice.


[ROCm/hip commit: 182d346356]
2017-10-24 20:38:49 +01:00
Chris Kitching aa9fa15bdf Use a cmake glob for collecting hipify sources
Should make breaking this monstrosity into multiple files a bit
easier...


[ROCm/hip commit: be34a017ef]
2017-10-24 20:38:48 +01:00
Chris Kitching 9eff10c00d Move giant lookup table into another translation unit
Also, rewrote it as a constant variable instead of a function
that imperatively fills a map. It's shorter, faster the compile,
and (depending on how badly the compiler screws it up) maybe
faster to run.

And, of course, it starts breaking up that giant .cpp file.


[ROCm/hip commit: 4ab29113a1]
2017-10-24 20:38:25 +01:00
Evgeny Mankov 90c72a6bd5 Merge pull request #230 from emankov/master
[HIPIFY][fix] cmake: NO_DEFAULT_PATH is strongly needed in find_package for LLVM

[ROCm/hip commit: fea0b6ef2f]
2017-10-24 20:44:56 +03:00
Evgeny Mankov 713c4ae3f4 Merge branch 'master' into tests
[ROCm/hip commit: 3f4d435d31]
2017-10-24 20:03:51 +03:00
Evgeny Mankov 558682ae64 Merge pull request #227 from ChrisKitching/clang-silly
Tweak some version numbers in clang version compatibility checks

[ROCm/hip commit: 061fe7a192]
2017-10-24 17:16:07 +03:00
Evgeny Mankov 31b3c14f05 [HIPIFY][fix] cmake: NO_DEFAULT_PATH is strongly needed in find_package for LLVM
Otherwise LLVM will be searched in system folders.


[ROCm/hip commit: 07a6d3ec06]
2017-10-24 16:35:10 +03:00
Evgeny Mankov 6a8e6693ad [HIPIFY][fix] cmake: do not build hipify-clang if not asked
+ warn "hipify-clang will not be built" if HIPIFY_CLANG_LLVM_DIR is not specified.
+ fix typo in previous commit .


[ROCm/hip commit: 5a9d4e3435]
2017-10-24 14:16:05 +03:00
emankov 83014ac728 [HIPIFY] cmake: simplify build
[ROCm/hip commit: 062127c5ea]
2017-10-24 10:51:11 +03:00
Chris Kitching 71cc7740ff Tweak some version numbers in clang version compatibility checks
Apparently a couple of those APIs changed in clang 5, not 4.

Drat.


[ROCm/hip commit: 0207a29f78]
2017-10-24 01:45:23 +01:00
Evgeny Mankov 241e72b02f [HIPIFY] cmake: fix standalone build
[ROCm/hip commit: ffd22ec756]
2017-10-23 21:16:13 +03:00
Chris Kitching cb581e6b4e Add concurentKernels.cu to the testsuite
[ROCm/hip commit: ac42fa53ce]
2017-10-23 13:39:37 +01:00
Chris Kitching 44946f5b7a Add the CUDA samples include dir to the path for tests
Means we get to easily steal CUDA examples for tests


[ROCm/hip commit: 71aa7e267a]
2017-10-23 13:39:37 +01:00
Chris Kitching 8144287158 Add cudaRegister.cu lit test
[ROCm/hip commit: 33f88fe7a1]
2017-10-23 13:39:37 +01:00
Chris Kitching ed3ed08e68 Add square.cu to lit testsuite
[ROCm/hip commit: 2faf2800a0]
2017-10-23 13:39:37 +01:00
Chris Kitching e32e9ffa6f Introduce a test runner script to simplify invocation
... And to use a standard, highly amusing trick for making
coloured output work.


[ROCm/hip commit: 80120aed22]
2017-10-23 13:39:37 +01:00
Chris Kitching 90cda6a00a Adapt lit test for the hipLaunchKernelGGL changes from before...
[ROCm/hip commit: 711f495041]
2017-10-23 13:39:37 +01:00
Chris Kitching 641f09e39d Migrate lit test to using FileCheck, so failures are readable
It seems the test is already broken, but look how awesome the
error message is now:

/home/chris/HIP/tests/hipify-clang/axpy.cu:31:12: error: expected string not found in input
 // CHECK: hipLaunchKernel(HIP_KERNEL_NAME(axpy), dim3(1), dim3(kDataLen), 0, 0, a, device_x, device_y);
           ^
<stdin>:31:2: note: scanning from here
 //
 ^
<stdin>:33:2: note: possible intended match here
 hipLaunchKernelGGL(axpy, dim3(1), dim3(kDataLen), 0, 0, a, device_x, device_y);
 ^


[ROCm/hip commit: 66cc45afc5]
2017-10-23 13:39:37 +01:00
Chris Kitching 866f3a06b9 Look for FileCheck for running lit tests, too
Use of grep in `lit` RUN lines is deprecated:
https://llvm.org/docs/TestingGuide.html#writing-new-regression-tests

Using grep leads to really unhelpful failure output (it literally
just says "the test failed"). FileCheck is much more helpful, and
distributed with LLVM on most distros anyway, so this extra
dependency shouldn't prove problematic.


[ROCm/hip commit: 640afd4186]
2017-10-23 13:39:36 +01:00
Chris Kitching ddcdfa839c Propagate the CUDA toolkit directory into the lit tests
Allows the tests to actually run... :D


[ROCm/hip commit: efa814e381]
2017-10-23 13:39:36 +01:00
Chris Kitching 971b55301c Remove dependency on nonexistent lit target
This just... isn't a target. Maybe you were trying to do a file
dependency? But that's handled implicitly by the find_program
call anyway, so all this is doing is generating a cmake warning


[ROCm/hip commit: 76ccda4205]
2017-10-23 13:39:36 +01:00
Evgeny Mankov d79f1b4747 Merge pull request #219 from ChrisKitching/newClang
[HIPIFY] Migrate hipify-clang to a newer version of clang

[ROCm/hip commit: d1ba399eb1]
2017-10-21 11:59:46 +03:00
Ben Sander 584fb96850 Merge pull request #214 from scchan/reinit_printf_buffer
hipDeviceReset(): make sure to reinitialize the printf buffer in hcc RT

[ROCm/hip commit: 0e3d824e8d]
2017-10-20 11:04:37 -05:00
Chris Kitching ecbe19828e Avoid a double-free of HipifyPPCallbacks instance
This bug was present all along, but something changed in the order
of de-initialisation performed by llvm that makes it actually
crash now.

The constructor of HipifyPPCallbacks gives:
```
std::unique_ptr<HipifyPPCallbacks>(this)
```
to the LLVM Preprocessor instance. The Preprocessor instance
subsequently frees the HipifyPPCallbacks, which is then freed
again when we leave the stack frame at line 4340.

So: let's leak the HipifyPPCallbacks onto the heap, and leave
the LLVM Preprocessor object responsible for tidying it up.


[ROCm/hip commit: f5b273fc4f]
2017-10-19 17:09:32 +01:00
Chris Kitching dc869ef474 Be agnostic to the new getReplacements() API
See comment


[ROCm/hip commit: 6718519025]
2017-10-19 17:08:55 +01:00
Chris Kitching c08f105982 Use inline initialisers to set default field values
A trivial cleanup that helps in a moment..


[ROCm/hip commit: 24fc459f69]
2017-10-19 17:08:55 +01:00
Chris Kitching 2584387bfc Omit now-removed Filename string arg from handleBeginSource
[ROCm/hip commit: 7ae6a10c99]
2017-10-19 17:08:55 +01:00
Chris Kitching b2ac8756fc Cope with Replacements now having llvm::Error returns
[ROCm/hip commit: 7e253365f1]
2017-10-19 17:08:54 +01:00
Chris Kitching 5e45fd1c7c Cope with clang 4.0's rename of getNumArgs()
Sorry, this one I couldn't do in a perfectly elegant way ;)


[ROCm/hip commit: 575bedb28c]
2017-10-19 17:08:54 +01:00
Chris Kitching 459b78e997 Remove unnecessary call to Retain() on a smart pointer
The Preprocessor smart pointer is held by the CompilerInstance,
and therefore its reference count cannot reach zero until the
CompilerInstance itself is destroyed.

If the CompilerInstance is destroyed, you have more to worry about
than just the preprocessor being deallocated!

Newer versions of the LLVM/Clang API migrated to using
std::shared_ptr, so there is no `Retain()` function (by that
name, anyway). Eliminating this redundant use is a neat and
backward-compatible way to become compatible with newer versions
of the LLVM/Clang API.


[ROCm/hip commit: 0953a7887d]
2017-10-19 17:08:54 +01:00
Chris Kitching 316faf5fc7 Refer to clang::StringLiteral explicitly
Newer versions of llvm/clang mean there is both an
llvm::StringLiteral and a clang::StringLiteral. Since we're
dumping both namespaces wholesale into the global namespace with
`using` declarations, this creates a name collision, which must be
resolved.

This change is backwards-compatible, and fixes a problem you
encounter when using newer versions of the llvm/clang API.


[ROCm/hip commit: 2975d00edc]
2017-10-19 17:08:54 +01:00
Chris Kitching 24adac896b Fix two faulty LLVM version checks
What we actually want to do here is use the StringRef version in
versions newer than 3.8, and the void one in 3.8 and older.

Checking "major-version >= 3 && minor-version >= 9" does not do
what we want. Consider what this will do for version 4.0, for
which minor-version is zero...


[ROCm/hip commit: 3a2fe40f78]
2017-10-19 17:08:54 +01:00
Chris Kitching 7298ba77b2 Use the cache for global variables - not PARENT_SCOPE hacks
[ROCm/hip commit: be5a120f90]
2017-10-19 17:08:54 +01:00
Chris Kitching 36ac7933cc Skip lit tests if lit cannot be found
[ROCm/hip commit: 9a3faec12c]
2017-10-19 17:08:54 +01:00
Chris Kitching 6b5ec20965 Don't reinvent find_package
PythonInterp is a finder module that ships with cmake. It supports
the conventional interaction with find_package that allows you
to demand success, and particular vesions, without having your
own logic:

https://cmake.org/cmake/help/v3.0/command/find_package.html


[ROCm/hip commit: 764d89dcbe]
2017-10-19 17:08:53 +01:00
Chris Kitching 05f095db11 Don't be picky about clang versions
[ROCm/hip commit: 757b9c3b76]
2017-10-19 17:08:53 +01:00
Chris Kitching ad9f427432 Declare HIPIFY_CLANG_TESTS as a cmake option
[ROCm/hip commit: cb948dc7fd]
2017-10-19 17:08:53 +01:00