summaryrefslogtreecommitdiff
path: root/lib/Target/NVPTX/NVPTXTargetMachine.cpp
diff options
context:
space:
mode:
authorEli Bendersky <eliben@google.com>2014-04-03 21:18:25 +0000
committerEli Bendersky <eliben@google.com>2014-04-03 21:18:25 +0000
commit25540a7f39846c4c11a9fd578b9d3686c568847c (patch)
tree85cf9743948e2518a6d1fa4993ede6ffc461082b /lib/Target/NVPTX/NVPTXTargetMachine.cpp
parent89218827c87ce2e3ef9f968550e060fae9dfd827 (diff)
downloadllvm-25540a7f39846c4c11a9fd578b9d3686c568847c.tar.gz
llvm-25540a7f39846c4c11a9fd578b9d3686c568847c.tar.bz2
llvm-25540a7f39846c4c11a9fd578b9d3686c568847c.tar.xz
Optimize away unnecessary address casts.
Removes unnecessary casts from non-generic address spaces to the generic address space for certain code patterns. Patch by Jingyue Wu. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205571 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/NVPTX/NVPTXTargetMachine.cpp')
-rw-r--r--lib/Target/NVPTX/NVPTXTargetMachine.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/lib/Target/NVPTX/NVPTXTargetMachine.cpp
index 7d7d79314c..9aa7dbb4fa 100644
--- a/lib/Target/NVPTX/NVPTXTargetMachine.cpp
+++ b/lib/Target/NVPTX/NVPTXTargetMachine.cpp
@@ -50,6 +50,7 @@ namespace llvm {
void initializeNVVMReflectPass(PassRegistry&);
void initializeGenericToNVVMPass(PassRegistry&);
void initializeNVPTXAssignValidGlobalNamesPass(PassRegistry&);
+void initializeNVPTXFavorNonGenericAddrSpacesPass(PassRegistry &);
}
extern "C" void LLVMInitializeNVPTXTarget() {
@@ -62,6 +63,8 @@ extern "C" void LLVMInitializeNVPTXTarget() {
initializeNVVMReflectPass(*PassRegistry::getPassRegistry());
initializeGenericToNVVMPass(*PassRegistry::getPassRegistry());
initializeNVPTXAssignValidGlobalNamesPass(*PassRegistry::getPassRegistry());
+ initializeNVPTXFavorNonGenericAddrSpacesPass(
+ *PassRegistry::getPassRegistry());
}
static std::string computeDataLayout(const NVPTXSubtarget &ST) {
@@ -143,6 +146,12 @@ void NVPTXPassConfig::addIRPasses() {
TargetPassConfig::addIRPasses();
addPass(createNVPTXAssignValidGlobalNamesPass());
addPass(createGenericToNVVMPass());
+ addPass(createNVPTXFavorNonGenericAddrSpacesPass());
+ // The FavorNonGenericAddrSpaces pass may remove instructions and leave some
+ // values unused. Therefore, we run a DCE pass right afterwards. We could
+ // remove unused values in an ad-hoc manner, but it requires manual work and
+ // might be error-prone.
+ addPass(createDeadCodeEliminationPass());
}
bool NVPTXPassConfig::addInstSelector() {