[NVPTX] Run NVVMReflect at the beginning of IR passes.
authorJustin Lebar <jlebar@google.com>
Wed, 27 Apr 2016 19:13:37 +0000 (19:13 +0000)
committerJustin Lebar <jlebar@google.com>
Wed, 27 Apr 2016 19:13:37 +0000 (19:13 +0000)
commit7cdbce59462d87c7e8236ef9032b9ec11e2d54a4
tree45d2015557650557034076ed8ba556f86e7142e7
parent5a7df9c130410766a3e76423109bafae1abbae3d
[NVPTX] Run NVVMReflect at the beginning of IR passes.

Summary:
Currently the NVVMReflect pass is run at the beginning of our backend
passes.  But really, it should be run as early as possible, as it's
simply resolving an "if" statement in code.  So copy it into
TargetMachine::addEarlyAsPossiblePasses.

We still run it at the beginning of the backend passes, since it's
needed for correctness when lowering to nvptx.

(Specifically, NVVMReflect changes each call to the __nvvm_reflect
function or llvm.nvvm.reflect intrinsic into an integer constant, based
on the pass's configuration.  Clearly we miss many optimization
opportunities if we perform this transformation at the beginning of
codegen.)

Reviewers: rnk

Subscribers: tra, llvm-commits, jholewinski

Differential Revision: http://reviews.llvm.org/D18616

llvm-svn: 267765
llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp
llvm/lib/Target/NVPTX/NVPTXTargetMachine.h