Page MenuHomePhabricator

Add support for __nvvm_reflect changes in libdevice in CUDA-7.0

Authored by tra on Mar 17 2015, 3:04 PM.



CUDA 7.0's libdevice uses slightly different IR to call nvvm_reflect
and that triggers an assertion in nvvm_reflect optimization pass. This
change allows nvvm_reflect pass to deal with both old and new ways to
pass an argument to

Diff Detail


Event Timeline

tra updated this revision to Diff 22135.Mar 17 2015, 3:04 PM
tra retitled this revision from to Add support for __nvvm_reflect changes in libdevice in CUDA-7.0.
tra updated this object.
tra edited the test plan for this revision. (Show Details)
tra added reviewers: eliben, echristo.
tra added a subscriber: Unknown Object (MLST).
eliben added inline comments.Mar 17 2015, 6:44 PM
162 ↗(On Diff #22135)

Artem, it definitely makes sense to document this change. For lack of a better place, a detailed comment somewhere here would do. Please describe the difference between the two formats and how it's handled here.

tra updated this revision to Diff 22207.Mar 18 2015, 1:35 PM

Added details on the differences in IR used to call __nvvm_reflect in different CUDA versions.
Updated IR in the test case to work with recent LLVM.

eliben added inline comments.Mar 18 2015, 4:52 PM
182 ↗(On Diff #22207)

It may be more idiomatic to use dyn_cast here and then get your Operand*, removing the following cast<>s
It's done a bunch all over llvm

52 ↗(On Diff #22207)

Mention that this is the CUDA 7 version

tra updated this revision to Diff 22233.Mar 18 2015, 5:20 PM

Addressed eliben@'s comments.

eliben accepted this revision.Mar 18 2015, 5:28 PM
eliben edited edge metadata.


This revision is now accepted and ready to land.Mar 18 2015, 5:28 PM
This revision was automatically updated to reflect the committed changes.
echristo edited edge metadata.Mar 19 2015, 10:14 AM

Comment looks good (heinous, but good).