## Autogenerated by LLVM/Polly configuration.
# Do not edit!
config.llvm_src_root = "@LLVM_SOURCE_DIR@"
config.llvm_obj_root = "@LLVM_BINARY_DIR@"
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
config.polly_obj_root = "@POLLY_BINARY_DIR@"
config.polly_lib_dir = "@POLLY_LIB_DIR@"
config.target_triple = "@TARGET_TRIPLE@"
config.enable_gpgpu_codegen = "@CUDALIB_FOUND@"
config.cloog_found = "@CLOOG_FOUND@"
config.link_polly_into_tools = "@LINK_POLLY_INTO_TOOLS@"

## Check the current platform with regex
import re
EAT_ERR_ON_X86 = ' '
if (re.match(r'^x86_64*', '@TARGET_TRIPLE@') == None) :
  EAT_ERR_ON_X86 = '|| echo \"error is eaten\"'

# Support substitution of the tools and libs dirs with user parameters. This is
# used when we can't determine the tool dir at configuration time.
try:
    config.llvm_tools_dir = config.llvm_tools_dir % lit_config.params
    config.llvm_libs_dir = config.llvm_libs_dir % lit_config.params
except KeyError,e:
    key, = e.args
    lit_config.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (key,key))

if config.link_polly_into_tools == '' or \
   config.link_polly_into_tools.lower() == '0' or \
   config.link_polly_into_tools.lower() == 'n' or \
   config.link_polly_into_tools.lower() == 'no' or \
   config.link_polly_into_tools.lower() == 'off' or \
   config.link_polly_into_tools.lower() == 'false' or \
   config.link_polly_into_tools.lower() == 'notfound' or \
   config.link_polly_into_tools.lower() == 'link_polly_into_tools-notfound':
    config.substitutions.append(('%loadPolly', '-load '
                                 + config.polly_lib_dir + '/LLVMPolly@LLVM_SHLIBEXT@'))
else:
    config.substitutions.append(('%loadPolly', ''))

config.substitutions.append(('%defaultOpts', ' -basicaa -polly-prepare'))
config.substitutions.append(('%polybenchOpts', ' -O3 -loop-simplify -indvars '))
config.substitutions.append(('%vector-opt', '-polly-vectorizer=polly'))

# Let the main config do the real work.
lit_config.load_config(config, "@POLLY_SOURCE_DIR@/test/lit.cfg")
