Add PassManagerBuilder.loop_vectorize property

This commit is contained in:
Siu Kwan Lam 2012-12-27 17:58:15 -06:00
commit 10e83f306f
4 changed files with 51 additions and 1 deletions

View file

@ -988,6 +988,11 @@ _wrap_obj2obj(LLVMPassManagerBuilderGetSizeLevel, LLVMPassManagerBuilderRef, int
_wrap_objint2none(LLVMPassManagerBuilderSetVectorize, LLVMPassManagerBuilderRef)
_wrap_obj2obj(LLVMPassManagerBuilderGetVectorize, LLVMPassManagerBuilderRef, int)
#if LLVM_VERSION_MAJOR >= 3 && LLVM_VERSION_MINOR >= 2
_wrap_objint2none(LLVMPassManagerBuilderSetLoopVectorize, LLVMPassManagerBuilderRef)
_wrap_obj2obj(LLVMPassManagerBuilderGetLoopVectorize, LLVMPassManagerBuilderRef, int)
#endif //llvm-3.2
_wrap_objint2none(LLVMPassManagerBuilderSetDisableUnitAtATime,
LLVMPassManagerBuilderRef)
_wrap_obj2obj(LLVMPassManagerBuilderGetDisableUnitAtATime,
@ -1989,7 +1994,10 @@ static PyMethodDef core_methods[] = {
_method( LLVMPassManagerBuilderSetVectorize )
_method( LLVMPassManagerBuilderGetVectorize )
#if LLVM_VERSION_MAJOR >= 3 && LLVM_VERSION_MINOR >= 2
_method( LLVMPassManagerBuilderSetLoopVectorize )
_method( LLVMPassManagerBuilderGetLoopVectorize )
#endif // llvm-3.2
_method( LLVMPassManagerBuilderSetDisableUnitAtATime )
_method( LLVMPassManagerBuilderGetDisableUnitAtATime )

View file

@ -669,6 +669,19 @@ int LLVMPassManagerBuilderGetVectorize(LLVMPassManagerBuilderRef pmb){
return llvm::unwrap(pmb)->Vectorize;
}
#if LLVM_VERSION_MAJOR >= 3 && LLVM_VERSION_MINOR >= 2
void LLVMPassManagerBuilderSetLoopVectorize(LLVMPassManagerBuilderRef pmb,
int flag)
{
llvm::unwrap(pmb)->LoopVectorize = flag;
}
int LLVMPassManagerBuilderGetLoopVectorize(LLVMPassManagerBuilderRef pmb){
return llvm::unwrap(pmb)->LoopVectorize;
}
#endif // llvm-3.2
int LLVMPassManagerBuilderGetDisableUnitAtATime(LLVMPassManagerBuilderRef pmb)
{
return llvm::unwrap(pmb)->DisableUnitAtATime;

View file

@ -312,6 +312,19 @@ void LLVMPassManagerBuilderSetVectorize(LLVMPassManagerBuilderRef pmb, int flag)
*/
int LLVMPassManagerBuilderGetVectorize(LLVMPassManagerBuilderRef pmb);
#if LLVM_VERSION_MAJOR >= 3 && LLVM_VERSION_MINOR >= 2
/*
* Wraps PassManagerBuilder::LoopVectorize
*/
void LLVMPassManagerBuilderSetLoopVectorize(LLVMPassManagerBuilderRef pmb,
int flag);
/*
* Wraps PassManagerBuilder::LoopVectorize
*/
int LLVMPassManagerBuilderGetLoopVectorize(LLVMPassManagerBuilderRef pmb);
#endif // llvm-3.2
/*
* Wraps PassManagerBuilder::DisableUnitAtATime
*/

View file

@ -41,6 +41,7 @@ import llvm.core as core # module, function etc.
import llvm._core as _core # C wrappers
import llvm._util as _util # Utility functions
import warnings
#===----------------------------------------------------------------------===
# Pass manager builder
#===----------------------------------------------------------------------===
@ -89,6 +90,21 @@ class PassManagerBuilder(object):
vectorize = property(_get_vectorize, _set_vectorize)
def _set_loop_vectorize(self, enable):
try:
_core.LLVMPassManagerBuilderSetLoopVectorize(self.ptr,
int(bool(enable)))
except AttributeError:
warnings.warn("Ignored. LLVM-3.1 & prior do not support loop vectorizer.")
def _get_loop_vectorize(self):
try:
return bool(_core.LLVMPassManagerBuilderGetLoopVectorize(self.ptr))
except AttributeError:
return False
loop_vectorize = property(_get_loop_vectorize, _set_loop_vectorize)
def _set_disable_unit_at_a_time(self, disable):
return _core.LLVMPassManagerBuilderSetDisableUnitAtATime(
self.ptr, disable)