Files
rocm-systems/rocclr/compiler/lib/backends/common/optimizer.hpp
T
foreman e3449fb988 P4 to Git Change 1133953 by smekhano@stas-solstice-HSA on 2015/03/24 16:29:11
ECR #333753 - part of the changes to use llvm 3.6
	Testing: smoke, precheckin
	Reviewed by Brian Sumner

Affected files ...

... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/compiler_stage.cpp#15 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/compiler_stage.hpp#11 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/linker.cpp#123 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/optimizer.hpp#5 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/AMDILMDTypes.h#3 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/lex.yy.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/jit.hpp#2 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/utils/options.cpp#32 edit
2015-03-24 16:59:45 -04:00

111 wiersze
2.7 KiB
C++

//
// Copyright (c) 2008 Advanced Micro Devices, Inc. All rights reserved.
//
#ifndef _BE_OPTIMIZER_HPP_
#define _BE_OPTIMIZER_HPP_
#include "aclTypes.h"
#include "compiler_stage.hpp"
namespace llvm
{
class Module;
}
namespace amdcl
{
/*! \addtogroup Compiler Library
*
* \copydoc amdcl::Optimizer
*
* @{
*/
class Optimizer : public LLVMCompilerStage {
Optimizer(Optimizer&); // DO NOT IMPLEMENT.
Optimizer(); // DO NOT IMPLEMENT.
public:
Optimizer(aclCompiler *cl, aclBinary* elf, aclLogFunction log)
: LLVMCompilerStage(cl, elf, log) {
// Expose some options to LLVM
llvm::AMDOptions *amdopts = &hookup_.amdoptions;
if (opts_) {
amdopts->OptLiveness = opts_->oVariables->OptLiveness;
amdopts->NumAvailGPRs = opts_->NumAvailGPRs;
}
}
virtual ~Optimizer() {}
/*! Function that takes in the LLVM module as input
* and optimizes it.
* Returns 0 on success and non-zero on failure.
*/
virtual int optimize(llvm::Module *input) = 0;
}; // class Optimizer
/*@}*/
/*! \addtogroup Compiler Library
*
* \copydoc amdcl::CLOptimizer
*
* @{
*/
class CLOptimizer : public Optimizer {
public:
CLOptimizer(aclCompiler *cl, aclBinary *elf, aclLogFunction log)
: Optimizer(cl, elf, log) {}
virtual ~CLOptimizer() {}
/*! Function that takes in the LLVM module as input
* and optimizes it.
* Returns 0 on success and non-zero on failure.
*/
virtual int optimize(llvm::Module *input) = 0;
}; // class CLOptimizer
/*@}*/
/*! \addtogroup Compiler Library
*
* \copydoc amdcl::GPUOptimizer
*
* @{
*/
class GPUOptimizer : public CLOptimizer {
public:
GPUOptimizer(aclCompiler *cl, aclBinary *elf, aclLogFunction log)
: CLOptimizer(cl, elf, log) {}
virtual ~GPUOptimizer() {}
/*! Function that takes in the LLVM module as input
* and optimizes it.
* Returns 0 on success and non-zero on failure.
*/
virtual int optimize(llvm::Module *input);
}; // class GPUOptimizer
/*@}*/
/*! \addtogroup Compiler Library
*
* \copydoc amdcl::CPUOptimizer
*
* @{
*/
class CPUOptimizer : public CLOptimizer {
public:
CPUOptimizer(aclCompiler *cl, aclBinary *elf, aclLogFunction log)
: CLOptimizer(cl, elf, log) {}
virtual ~CPUOptimizer() {}
/*! Function that takes in the LLVM module as input
* and optimizes it.
* Returns 0 on success and non-zero on failure.
*/
virtual int optimize(llvm::Module *input);
protected:
int preOptimizer(llvm::Module *m);
}; // class CPUOptimizer
/*@}*/
}; // amdcl namespace
#endif // _BE_OPTIMIZER_HPP_