Fix built for LLVM2.9 and 3.1svn
This commit is contained in:
24
Makefile
24
Makefile
@@ -5,20 +5,34 @@
|
|||||||
ARCH_OS = $(shell uname)
|
ARCH_OS = $(shell uname)
|
||||||
ARCH_TYPE = $(shell arch)
|
ARCH_TYPE = $(shell arch)
|
||||||
|
|
||||||
|
ifeq ($(shell llvm-config --version), 3.1svn)
|
||||||
|
LLVM_LIBS=-lLLVMAsmParser -lLLVMInstrumentation -lLLVMLinker \
|
||||||
|
-lLLVMArchive -lLLVMBitReader -lLLVMDebugInfo -lLLVMJIT -lLLVMipo \
|
||||||
|
-lLLVMBitWriter -lLLVMTableGen -lLLVMCBackendInfo \
|
||||||
|
-lLLVMX86Disassembler -lLLVMX86CodeGen -lLLVMSelectionDAG \
|
||||||
|
-lLLVMAsmPrinter -lLLVMX86AsmParser -lLLVMX86Desc -lLLVMX86Info \
|
||||||
|
-lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCDisassembler -lLLVMMCParser \
|
||||||
|
-lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
|
||||||
|
-lLLVMipa -lLLVMAnalysis -lLLVMMCJIT -lLLVMRuntimeDyld \
|
||||||
|
-lLLVMExecutionEngine -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore \
|
||||||
|
-lLLVMSupport
|
||||||
|
else
|
||||||
|
LLVM_LIBS=$(shell llvm-config --libs)
|
||||||
|
endif
|
||||||
|
|
||||||
CLANG=clang
|
CLANG=clang
|
||||||
CLANG_LIBS = -lclangFrontend -lclangDriver \
|
CLANG_LIBS = -lclangFrontend -lclangDriver \
|
||||||
-lclangSerialization -lclangParse -lclangSema \
|
-lclangSerialization -lclangParse -lclangSema \
|
||||||
-lclangAnalysis -lclangAST -lclangLex -lclangBasic
|
-lclangAnalysis -lclangAST -lclangLex -lclangBasic
|
||||||
|
|
||||||
ISPC_LIBS=$(CLANG_LIBS) \
|
ISPC_LIBS=$(shell llvm-config --ldflags) $(CLANG_LIBS) $(LLVM_LIBS) \
|
||||||
$(shell llvm-config --ldflags --libs) \
|
|
||||||
-lpthread -ldl
|
-lpthread -ldl
|
||||||
ISPC_TEST_LIBS=$(shell llvm-config --ldflags --libs) \
|
ISPC_TEST_LIBS=$(shell llvm-config --ldflags) $(LLVM_LIBS) \
|
||||||
-lpthread -ldl
|
-lpthread -ldl
|
||||||
|
|
||||||
LLVM_CXXFLAGS=$(shell llvm-config --cppflags)
|
LLVM_CXXFLAGS=$(shell llvm-config --cppflags)
|
||||||
LLVM_VERSION=$(shell llvm-config --version | sed s/\\./_/)
|
LLVM_VERSION=LLVM_$(shell llvm-config --version | sed s/\\./_/)
|
||||||
LLVM_VERSION_DEF=-DLLVM_$(LLVM_VERSION)
|
LLVM_VERSION_DEF=-D$(LLVM_VERSION)
|
||||||
|
|
||||||
BUILD_DATE=$(shell date +%Y%m%d)
|
BUILD_DATE=$(shell date +%Y%m%d)
|
||||||
BUILD_VERSION=$(shell git log --abbrev-commit --abbrev=16 | head -1)
|
BUILD_VERSION=$(shell git log --abbrev-commit --abbrev=16 | head -1)
|
||||||
|
|||||||
18
builtins.m4
18
builtins.m4
@@ -715,7 +715,7 @@ define <$1 x $3> @__atomic_$2_$4_global($3 * %ptr, <$1 x $3> %val,
|
|||||||
%eltvec`'i = insertelement <$1 x $3> %eltvec`'eval(i-1), $3 %red`'eval(i-1), i32 i')
|
%eltvec`'i = insertelement <$1 x $3> %eltvec`'eval(i-1), $3 %red`'eval(i-1), i32 i')
|
||||||
|
|
||||||
; make the atomic call, passing it the final reduced value
|
; make the atomic call, passing it the final reduced value
|
||||||
ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
ifelse(LLVM_VERSION, `LLVM_2_9',`
|
||||||
%final0 = call $3 @llvm.atomic.load.$2.$3.p0$3($3 * %ptr, $3 %red`'eval($1-1))', `
|
%final0 = call $3 @llvm.atomic.load.$2.$3.p0$3($3 * %ptr, $3 %red`'eval($1-1))', `
|
||||||
%final0 = atomicrmw $2 $3 * %ptr, $3 %red`'eval($1-1) seq_cst')
|
%final0 = atomicrmw $2 $3 * %ptr, $3 %red`'eval($1-1) seq_cst')
|
||||||
|
|
||||||
@@ -747,7 +747,7 @@ ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
|||||||
|
|
||||||
define(`global_atomic_uniform', `
|
define(`global_atomic_uniform', `
|
||||||
|
|
||||||
ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
ifelse(LLVM_VERSION, `LLVM_2_9',`
|
||||||
declare $3 @llvm.atomic.load.$2.$3.p0$3($3 * %ptr, $3 %delta)
|
declare $3 @llvm.atomic.load.$2.$3.p0$3($3 * %ptr, $3 %delta)
|
||||||
|
|
||||||
define $3 @__atomic_$2_uniform_$4_global($3 * %ptr, $3 %val,
|
define $3 @__atomic_$2_uniform_$4_global($3 * %ptr, $3 %val,
|
||||||
@@ -771,7 +771,7 @@ define $3 @__atomic_$2_uniform_$4_global($3 * %ptr, $3 %val,
|
|||||||
;; $2: llvm type of the vector elements (e.g. i32)
|
;; $2: llvm type of the vector elements (e.g. i32)
|
||||||
;; $3: ispc type of the elements (e.g. int32)
|
;; $3: ispc type of the elements (e.g. int32)
|
||||||
|
|
||||||
ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
ifelse(LLVM_VERSION, `LLVM_2_9',`
|
||||||
declare i32 @llvm.atomic.swap.i32.p0i32(i32 * %ptr, i32 %val)
|
declare i32 @llvm.atomic.swap.i32.p0i32(i32 * %ptr, i32 %val)
|
||||||
declare i64 @llvm.atomic.swap.i64.p0i64(i64 * %ptr, i64 %val)')
|
declare i64 @llvm.atomic.swap.i64.p0i64(i64 * %ptr, i64 %val)')
|
||||||
|
|
||||||
@@ -784,7 +784,7 @@ define <$1 x $2> @__atomic_swap_$3_global($2* %ptr, <$1 x $2> %val,
|
|||||||
|
|
||||||
per_lane($1, <$1 x i32> %mask, `
|
per_lane($1, <$1 x i32> %mask, `
|
||||||
%val_LANE_ID = extractelement <$1 x $2> %val, i32 LANE
|
%val_LANE_ID = extractelement <$1 x $2> %val, i32 LANE
|
||||||
ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
ifelse(LLVM_VERSION, `LLVM_2_9',`
|
||||||
%r_LANE_ID = call $2 @llvm.atomic.swap.$2.p0$2($2 * %ptr, $2 %val_LANE_ID)', `
|
%r_LANE_ID = call $2 @llvm.atomic.swap.$2.p0$2($2 * %ptr, $2 %val_LANE_ID)', `
|
||||||
%r_LANE_ID = atomicrmw xchg $2 * %ptr, $2 %val_LANE_ID seq_cst')
|
%r_LANE_ID = atomicrmw xchg $2 * %ptr, $2 %val_LANE_ID seq_cst')
|
||||||
%rp_LANE_ID = getelementptr $2 * %rptr32, i32 LANE
|
%rp_LANE_ID = getelementptr $2 * %rptr32, i32 LANE
|
||||||
@@ -796,7 +796,7 @@ ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
|||||||
|
|
||||||
define $2 @__atomic_swap_uniform_$3_global($2* %ptr, $2 %val,
|
define $2 @__atomic_swap_uniform_$3_global($2* %ptr, $2 %val,
|
||||||
<$1 x i32> %mask) nounwind alwaysinline {
|
<$1 x i32> %mask) nounwind alwaysinline {
|
||||||
ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
ifelse(LLVM_VERSION, `LLVM_2_9',`
|
||||||
%r = call $2 @llvm.atomic.swap.$2.p0$2($2 * %ptr, $2 %val)', `
|
%r = call $2 @llvm.atomic.swap.$2.p0$2($2 * %ptr, $2 %val)', `
|
||||||
%r = atomicrmw xchg $2 * %ptr, $2 %val seq_cst')
|
%r = atomicrmw xchg $2 * %ptr, $2 %val seq_cst')
|
||||||
ret $2 %r
|
ret $2 %r
|
||||||
@@ -812,7 +812,7 @@ ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
|||||||
|
|
||||||
define(`global_atomic_exchange', `
|
define(`global_atomic_exchange', `
|
||||||
|
|
||||||
ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
ifelse(LLVM_VERSION, `LLVM_2_9',`
|
||||||
declare $2 @llvm.atomic.cmp.swap.$2.p0$2($2 * %ptr, $2 %cmp, $2 %val)')
|
declare $2 @llvm.atomic.cmp.swap.$2.p0$2($2 * %ptr, $2 %cmp, $2 %val)')
|
||||||
|
|
||||||
define <$1 x $2> @__atomic_compare_exchange_$3_global($2* %ptr, <$1 x $2> %cmp,
|
define <$1 x $2> @__atomic_compare_exchange_$3_global($2* %ptr, <$1 x $2> %cmp,
|
||||||
@@ -823,7 +823,7 @@ define <$1 x $2> @__atomic_compare_exchange_$3_global($2* %ptr, <$1 x $2> %cmp,
|
|||||||
per_lane($1, <$1 x i32> %mask, `
|
per_lane($1, <$1 x i32> %mask, `
|
||||||
%cmp_LANE_ID = extractelement <$1 x $2> %cmp, i32 LANE
|
%cmp_LANE_ID = extractelement <$1 x $2> %cmp, i32 LANE
|
||||||
%val_LANE_ID = extractelement <$1 x $2> %val, i32 LANE
|
%val_LANE_ID = extractelement <$1 x $2> %val, i32 LANE
|
||||||
ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
ifelse(LLVM_VERSION, `LLVM_2_9',`
|
||||||
%r_LANE_ID = call $2 @llvm.atomic.cmp.swap.$2.p0$2($2 * %ptr, $2 %cmp_LANE_ID,
|
%r_LANE_ID = call $2 @llvm.atomic.cmp.swap.$2.p0$2($2 * %ptr, $2 %cmp_LANE_ID,
|
||||||
$2 %val_LANE_ID)', `
|
$2 %val_LANE_ID)', `
|
||||||
%r_LANE_ID = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst')
|
%r_LANE_ID = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst')
|
||||||
@@ -836,7 +836,7 @@ ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
|||||||
|
|
||||||
define $2 @__atomic_compare_exchange_uniform_$3_global($2* %ptr, $2 %cmp,
|
define $2 @__atomic_compare_exchange_uniform_$3_global($2* %ptr, $2 %cmp,
|
||||||
$2 %val, <$1 x i32> %mask) nounwind alwaysinline {
|
$2 %val, <$1 x i32> %mask) nounwind alwaysinline {
|
||||||
ifelse(`LLVM_VERSION', `LLVM_2_9',`
|
ifelse(LLVM_VERSION, `LLVM_2_9',`
|
||||||
%r = call $2 @llvm.atomic.cmp.swap.$2.p0$2($2 * %ptr, $2 %cmp, $2 %val)', `
|
%r = call $2 @llvm.atomic.cmp.swap.$2.p0$2($2 * %ptr, $2 %cmp, $2 %val)', `
|
||||||
%r = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst')
|
%r = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst')
|
||||||
ret $2 %r
|
ret $2 %r
|
||||||
@@ -1784,7 +1784,7 @@ define void
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; prefetching
|
;; prefetching
|
||||||
|
|
||||||
ifelse(`LLVM_VERSION', `LLVM_2_9',
|
ifelse(LLVM_VERSION, `LLVM_2_9',
|
||||||
`
|
`
|
||||||
declare void @llvm.prefetch(i8* nocapture %ptr, i32 %readwrite, i32 %locality)
|
declare void @llvm.prefetch(i8* nocapture %ptr, i32 %readwrite, i32 %locality)
|
||||||
|
|
||||||
|
|||||||
15
ispc.cpp
15
ispc.cpp
@@ -241,11 +241,19 @@ Target::GetTargetMachine() const {
|
|||||||
|
|
||||||
llvm::Reloc::Model relocModel = generatePIC ? llvm::Reloc::PIC_ :
|
llvm::Reloc::Model relocModel = generatePIC ? llvm::Reloc::PIC_ :
|
||||||
llvm::Reloc::Default;
|
llvm::Reloc::Default;
|
||||||
#if defined(LLVM_3_0svn) || defined(LLVM_3_1svn) || defined(LLVM_3_0)
|
#if defined(LLVM_3_1svn)
|
||||||
|
std::string featuresString = attributes;
|
||||||
|
llvm::TargetOptions options;
|
||||||
|
if (g->opt.fastMath == true)
|
||||||
|
options.UnsafeFPMath = 1;
|
||||||
|
llvm::TargetMachine *targetMachine =
|
||||||
|
target->createTargetMachine(triple, cpu, featuresString, options,
|
||||||
|
relocModel);
|
||||||
|
#elif defined(LLVM_3_0)
|
||||||
std::string featuresString = attributes;
|
std::string featuresString = attributes;
|
||||||
llvm::TargetMachine *targetMachine =
|
llvm::TargetMachine *targetMachine =
|
||||||
target->createTargetMachine(triple, cpu, featuresString, relocModel);
|
target->createTargetMachine(triple, cpu, featuresString, relocModel);
|
||||||
#else
|
#else // LLVM 2.9
|
||||||
#ifdef ISPC_IS_APPLE
|
#ifdef ISPC_IS_APPLE
|
||||||
relocModel = llvm::Reloc::PIC_;
|
relocModel = llvm::Reloc::PIC_;
|
||||||
#endif // ISPC_IS_APPLE
|
#endif // ISPC_IS_APPLE
|
||||||
@@ -255,7 +263,8 @@ Target::GetTargetMachine() const {
|
|||||||
#ifndef ISPC_IS_WINDOWS
|
#ifndef ISPC_IS_WINDOWS
|
||||||
targetMachine->setRelocationModel(relocModel);
|
targetMachine->setRelocationModel(relocModel);
|
||||||
#endif // !ISPC_IS_WINDOWS
|
#endif // !ISPC_IS_WINDOWS
|
||||||
#endif
|
#endif // LLVM_2_9
|
||||||
|
|
||||||
assert(targetMachine != NULL);
|
assert(targetMachine != NULL);
|
||||||
|
|
||||||
targetMachine->setAsmVerbosityDefault(true);
|
targetMachine->setAsmVerbosityDefault(true);
|
||||||
|
|||||||
@@ -150,8 +150,10 @@ extern void yy_delete_buffer(YY_BUFFER_STATE);
|
|||||||
|
|
||||||
int
|
int
|
||||||
Module::CompileFile() {
|
Module::CompileFile() {
|
||||||
|
#ifndef LLVM_3_1svn
|
||||||
if (g->opt.fastMath == true)
|
if (g->opt.fastMath == true)
|
||||||
llvm::UnsafeFPMath = true;
|
llvm::UnsafeFPMath = true;
|
||||||
|
#endif // !LLVM_3_1svn
|
||||||
|
|
||||||
// FIXME: it'd be nice to do this in the Module constructor, but this
|
// FIXME: it'd be nice to do this in the Module constructor, but this
|
||||||
// function ends up calling into routines that expect the global
|
// function ends up calling into routines that expect the global
|
||||||
|
|||||||
4
opt.cpp
4
opt.cpp
@@ -961,9 +961,13 @@ lGetBasePtrAndOffsets(llvm::Value *ptrs, llvm::Value **offsets) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
assert(base != NULL);
|
assert(base != NULL);
|
||||||
|
#ifdef LLVM_2_9
|
||||||
|
*offsets = llvm::ConstantVector::get(delta);
|
||||||
|
#else
|
||||||
llvm::ArrayRef<llvm::Constant *> deltas(&delta[0],
|
llvm::ArrayRef<llvm::Constant *> deltas(&delta[0],
|
||||||
&delta[elements.size()]);
|
&delta[elements.size()]);
|
||||||
*offsets = llvm::ConstantVector::get(deltas);
|
*offsets = llvm::ConstantVector::get(deltas);
|
||||||
|
#endif
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user