|
33 | 33 | #include "llvm/Support/CommandLine.h"
|
34 | 34 | #include "llvm/Target/TargetMachine.h"
|
35 | 35 | #include "llvm/Target/TargetOptions.h"
|
| 36 | +#include "llvm/Transforms/IPO.h" |
36 | 37 | #include "llvm/Transforms/IPO/PassManagerBuilder.h"
|
37 | 38 | #include "llvm/Transforms/Scalar.h"
|
38 | 39 | #include "llvm/Transforms/Scalar/GVN.h"
|
@@ -63,6 +64,12 @@ static cl::opt<bool> UseShortPointersOpt(
|
63 | 64 | "Use 32-bit pointers for accessing const/local/shared address spaces."),
|
64 | 65 | cl::init(false), cl::Hidden);
|
65 | 66 |
|
| 67 | +static cl::opt<bool> |
| 68 | + UseIPSCCPO0("use-ipsccp-nvptx-O0", |
| 69 | + cl::desc("Use IPSCCP pass at O0 as a temp solution for " |
| 70 | + "nvvm-reflect dead-code errors."), |
| 71 | + cl::init(true), cl::Hidden); |
| 72 | + |
66 | 73 | namespace llvm {
|
67 | 74 |
|
68 | 75 | void initializeLocalAccessorToSharedMemoryPass(PassRegistry &);
|
@@ -327,6 +334,10 @@ void NVPTXPassConfig::addIRPasses() {
|
327 | 334 | const NVPTXSubtarget &ST = *getTM<NVPTXTargetMachine>().getSubtargetImpl();
|
328 | 335 | addPass(createNVVMReflectPass(ST.getSmVersion()));
|
329 | 336 |
|
| 337 | + if (getOptLevel() == CodeGenOpt::None && UseIPSCCPO0) { |
| 338 | + addPass(createIPSCCPPass()); |
| 339 | + } |
| 340 | + |
330 | 341 | // FIXME: should the target triple check be done by the pass itself?
|
331 | 342 | // See createNVPTXLowerArgsPass as an example
|
332 | 343 | if (getTM<NVPTXTargetMachine>().getTargetTriple().getOS() == Triple::CUDA) {
|
|
0 commit comments