fi
LLVM_REQUIRED_VERSION_MAJOR="3"
- LLVM_REQUIRED_VERSION_MINOR="1"
+ LLVM_REQUIRED_VERSION_MINOR="3"
if test "$LLVM_VERSION_INT" -lt "${LLVM_REQUIRED_VERSION_MAJOR}0${LLVM_REQUIRED_VERSION_MINOR}"; then
AC_MSG_ERROR([LLVM $LLVM_REQUIRED_VERSION_MAJOR.$LLVM_REQUIRED_VERSION_MINOR or newer is required])
fi
import SCons.Util
-required_llvm_version = '3.1'
+required_llvm_version = '3.3'
def generate(env):
'HAVE_STDINT_H',
])
env.Prepend(LIBPATH = [os.path.join(llvm_dir, 'lib')])
- if llvm_version >= distutils.version.LooseVersion('3.2'):
+ if True:
# 3.2
env.Prepend(LIBS = [
'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser',
'LLVMAnalysis', 'LLVMTarget', 'LLVMMC', 'LLVMCore',
'LLVMSupport', 'LLVMRuntimeDyld', 'LLVMObject'
])
- else:
- # 3.1
- env.Prepend(LIBS = [
- 'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser',
- 'LLVMX86CodeGen', 'LLVMX86Desc', 'LLVMSelectionDAG',
- 'LLVMAsmPrinter', 'LLVMMCParser', 'LLVMX86AsmPrinter',
- 'LLVMX86Utils', 'LLVMX86Info', 'LLVMMCJIT', 'LLVMJIT',
- 'LLVMExecutionEngine', 'LLVMCodeGen', 'LLVMScalarOpts',
- 'LLVMInstCombine', 'LLVMTransformUtils', 'LLVMipa',
- 'LLVMAnalysis', 'LLVMTarget', 'LLVMMC', 'LLVMCore',
- 'LLVMSupport'
- ])
env.Append(LIBS = [
'imagehlp',
'psapi',
#ifndef HAVE_LLVM
#error "HAVE_LLVM should be set with LLVM's version number, e.g. (0x0207 for 2.7)"
#endif
-#if HAVE_LLVM < 0x301
-#error "LLVM 3.1 or newer required"
+#if HAVE_LLVM < 0x303
+#error "LLVM 3.3 or newer required"
#endif
#include <llvm/Support/Host.h>
-#if HAVE_LLVM >= 0x0303
#include <llvm/IR/Module.h>
-#else
-#include <llvm/Module.h>
-#endif
#include <llvm/MC/MCDisassembler.h>
#include <llvm/MC/MCAsmInfo.h>
#if HAVE_LLVM >= 0x0305
#define OwningPtr std::unique_ptr
-#elif HAVE_LLVM >= 0x0303
+#else
#include <llvm/ADT/OwningPtr.h>
#endif
/* Only MCJIT is available as of LLVM SVN r216982 */
#if HAVE_LLVM >= 0x0306
-
-#define USE_MCJIT 1
-#define HAVE_AVX 1
-
-#else
-
-/**
- * AVX is supported in:
- * - standard JIT from LLVM 3.2 onwards
- * - MC-JIT from LLVM 3.1
- * - MC-JIT supports limited OSes (MacOSX and Linux)
- * - standard JIT in LLVM 3.1, with backports
- */
-#if defined(PIPE_ARCH_PPC_64) || defined(PIPE_ARCH_S390) || defined(PIPE_ARCH_ARM) || defined(PIPE_ARCH_AARCH64)
# define USE_MCJIT 1
-# define HAVE_AVX 0
-#elif HAVE_LLVM >= 0x0302 || (HAVE_LLVM == 0x0301 && defined(HAVE_JIT_AVX_SUPPORT))
-# define USE_MCJIT 0
-# define HAVE_AVX 1
-#elif HAVE_LLVM == 0x0301 && (defined(PIPE_OS_LINUX) || defined(PIPE_OS_APPLE))
+#elif defined(PIPE_ARCH_PPC_64) || defined(PIPE_ARCH_S390) || defined(PIPE_ARCH_ARM) || defined(PIPE_ARCH_AARCH64)
# define USE_MCJIT 1
-# define HAVE_AVX 1
#else
# define USE_MCJIT 0
-# define HAVE_AVX 0
#endif
-#endif /* HAVE_LLVM >= 0x0306 */
-
#if USE_MCJIT
void LLVMLinkInMCJIT();
#endif
* See also:
* - http://www.anandtech.com/show/4955/the-bulldozer-review-amd-fx8150-tested/2
*/
- if (HAVE_AVX &&
- util_cpu_caps.has_avx &&
+ if (util_cpu_caps.has_avx &&
util_cpu_caps.has_intel) {
lp_native_vector_width = 256;
} else {
util_cpu_caps.has_avx2 = 0;
}
- if (!HAVE_AVX) {
- /*
- * note these instructions are VEX-only, so can only emit if we use
- * avx (don't want to base it on has_avx & has_f16c later as that would
- * omit it unnecessarily on amd cpus, see above).
- */
- util_cpu_caps.has_f16c = 0;
- util_cpu_caps.has_xop = 0;
- }
-
#ifdef PIPE_ARCH_PPC_64
/* Set the NJ bit in VSCR to 0 so denormalized values are handled as
* specified by IEEE standard (PowerISA 2.06 - Section 6.3). This guarantees
#include <llvm/Support/TargetSelect.h>
-#if HAVE_LLVM >= 0x0303
#include <llvm/IR/IRBuilder.h>
#include <llvm/IR/Module.h>
#include <llvm/Support/CBindingWrapping.h>
-#endif
#include "pipe/p_config.h"
#include "util/u_debug.h"
public:
LLVMEnsureMultithreaded()
{
-#if HAVE_LLVM < 0x0303
- if (!llvm::llvm_is_multithreaded()) {
- llvm::llvm_start_multithreaded();
- }
-#else
if (!LLVMIsMultithreaded()) {
LLVMStartMultithreaded();
}
-#endif
}
};
return mgr()->allocateCodeSection(Size, Alignment, SectionID);
}
#endif
-#if HAVE_LLVM >= 0x0303
virtual uint8_t *allocateDataSection(uintptr_t Size,
unsigned Alignment,
unsigned SectionID,
virtual void registerEHFrames(llvm::StringRef SectionData) {
mgr()->registerEHFrames(SectionData);
}
-#endif
-#else
- virtual uint8_t *allocateDataSection(uintptr_t Size,
- unsigned Alignment,
- unsigned SectionID) {
- return mgr()->allocateDataSection(Size, Alignment, SectionID);
- }
#endif
virtual void *getPointerToNamedFunction(const std::string &Name,
bool AbortOnFailure=true) {
return mgr()->getPointerToNamedFunction(Name, AbortOnFailure);
}
-#if HAVE_LLVM == 0x0303
+#if HAVE_LLVM <= 0x0303
virtual bool applyPermissions(std::string *ErrMsg = 0) {
return mgr()->applyPermissions(ErrMsg);
}
-#elif HAVE_LLVM > 0x0303
+#else
virtual bool finalizeMemory(std::string *ErrMsg = 0) {
return mgr()->finalizeMemory(ErrMsg);
}
ExecutionEngine *JIT;
-#if HAVE_LLVM >= 0x0302
JIT = builder.create();
-#else
- /*
- * Workaround http://llvm.org/PR12833
- */
- StringRef MArch = "";
- StringRef MCPU = "";
- Triple TT(unwrap(M)->getTargetTriple());
- JIT = builder.create(builder.selectTarget(TT, MArch, MCPU, MAttrs));
-#endif
if (JIT) {
*OutJIT = wrap(JIT);
return 0;
util_cpu_detect();
-#if defined(PIPE_ARCH_X86) && HAVE_LLVM < 0x0302
- /* require SSE2 due to LLVM PR6960. */
- if (!util_cpu_caps.has_sse2)
- return NULL;
-#endif
-
#ifdef DEBUG
LP_DEBUG = debug_get_flags_option("LP_DEBUG", lp_debug_flags, 0 );
#endif
partial_mask |= !variant->opaque;
i32_zero = lp_build_const_int32(gallivm, 0);
-#if HAVE_LLVM < 0x0302
- /*
- * undef triggers a crash in LLVMBuildTrunc in convert_from_blend_type in some
- * cases (seen with r10g10b10a2, 128bit wide vectors) (only used for 1d case).
- */
- undef_src_val = lp_build_zero(gallivm, fs_type);
-#else
undef_src_val = lp_build_undef(gallivm, fs_type);
-#endif
row_type.length = fs_type.length;
vector_width = dst_type.floating ? lp_native_vector_width : lp_integer_vector_width;
#include <llvm/IR/DiagnosticInfo.h>
#include <llvm/IR/DiagnosticPrinter.h>
#endif
-#if HAVE_LLVM < 0x0303
-#include <llvm/DerivedTypes.h>
-#include <llvm/LLVMContext.h>
-#include <llvm/Module.h>
-#else
#include <llvm/IR/DerivedTypes.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/Module.h>
#include <llvm/Support/SourceMgr.h>
#include <llvm/IRReader/IRReader.h>
-#endif
#if HAVE_LLVM < 0x0305
#include <llvm/ADT/OwningPtr.h>
#endif
#include <llvm/Support/CodeGen.h>
#include <llvm/Support/TargetSelect.h>
#include <llvm/Support/MemoryBuffer.h>
-#if HAVE_LLVM < 0x0303
-#include <llvm/Support/PathV1.h>
-#endif
#include <llvm/Support/FormattedStream.h>
#include <llvm/Support/TargetRegistry.h>
#include <llvm/Transforms/IPO.h>
#include <llvm/Transforms/Utils/Cloning.h>
-#if HAVE_LLVM < 0x0302
-#include <llvm/Target/TargetData.h>
-#elif HAVE_LLVM < 0x0303
-#include <llvm/DataLayout.h>
-#else
#include <llvm/IR/DataLayout.h>
-#endif
#include <llvm/Target/TargetLibraryInfo.h>
#include <llvm/Target/TargetMachine.h>
#include <llvm/Target/TargetOptions.h>
c.getHeaderSearchOpts().AddPath(LIBCLC_INCLUDEDIR,
clang::frontend::Angled,
false, false
-#if HAVE_LLVM < 0x0303
- , false
-#endif
);
// Add libclc include
// of warnings and errors to be printed to stderr.
// http://www.llvm.org/bugs/show_bug.cgi?id=19735
c.getDiagnosticOpts().ShowCarets = false;
-#if HAVE_LLVM <= 0x0301
- c.getInvocation().setLangDefaults(clang::IK_OpenCL);
-#else
c.getInvocation().setLangDefaults(c.getLangOpts(), clang::IK_OpenCL,
clang::LangStandard::lang_opencl11);
-#endif
c.createDiagnostics(
-#if HAVE_LLVM < 0x0303
- 0, NULL,
-#endif
new clang::TextDiagnosticPrinter(
s_log,
-#if HAVE_LLVM <= 0x0301
- c.getDiagnosticOpts()));
-#else
&c.getDiagnosticOpts()));
-#endif
#if HAVE_LLVM >= 0x0306
c.getPreprocessorOpts().addRemappedFile(name,
c.getHeaderSearchOpts().AddPath(tmp_header_path,
clang::frontend::Angled,
false, false
-#if HAVE_LLVM < 0x0303
- , false
-#endif
);
for (header_map::const_iterator it = headers.begin();
compat::vector<module::argument> args;
llvm::Function *kernel_func = mod->getFunction(kernel_name);
-#if HAVE_LLVM < 0x0302
- llvm::TargetData TD(kernel_func->getParent());
-#elif HAVE_LLVM < 0x0305
+#if HAVE_LLVM < 0x0305
llvm::DataLayout TD(kernel_func->getParent()->getDataLayout());
#else
llvm::DataLayout TD(mod);