Am 13.05.2014 14:01, schrieb jfons...@vmware.com: > From: José Fonseca <jfons...@vmware.com> > > Older versions haven't been tested probably don't work anyway. But more > importantly, code supporting it is hindering further work. > --- > src/gallium/auxiliary/draw/draw_llvm.c | 48 ------ > src/gallium/auxiliary/gallivm/lp_bld.h | 3 + > src/gallium/auxiliary/gallivm/lp_bld_arit.c | 2 - > src/gallium/auxiliary/gallivm/lp_bld_conv.c | 4 +- > src/gallium/auxiliary/gallivm/lp_bld_debug.cpp | 75 +-------- > src/gallium/auxiliary/gallivm/lp_bld_init.c | 52 +----- > src/gallium/auxiliary/gallivm/lp_bld_logic.c | 189 > ---------------------- > src/gallium/auxiliary/gallivm/lp_bld_misc.cpp | 96 ----------- > src/gallium/auxiliary/gallivm/lp_bld_pack.c | 8 - > src/gallium/auxiliary/gallivm/lp_bld_sample.c | 9 -- > src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c | 10 -- > src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c | 18 +-- > src/gallium/auxiliary/gallivm/lp_bld_swizzle.c | 18 +-- > src/gallium/auxiliary/gallivm/lp_bld_type.c | 8 - > src/gallium/drivers/llvmpipe/lp_jit.c | 28 ---- > 15 files changed, 20 insertions(+), 548 deletions(-) > > diff --git a/src/gallium/auxiliary/draw/draw_llvm.c > b/src/gallium/auxiliary/draw/draw_llvm.c > index b9f8bb9..6a3e5b2 100644 > --- a/src/gallium/auxiliary/draw/draw_llvm.c > +++ b/src/gallium/auxiliary/draw/draw_llvm.c > @@ -97,15 +97,6 @@ create_jit_dvbuffer_type(struct gallivm_state *gallivm, > dvbuffer_type = LLVMStructTypeInContext(gallivm->context, elem_types, > Elements(elem_types), 0); > > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, struct_name, dvbuffer_type); > - > - /* Make sure the target's struct layout cache doesn't return > - * stale/invalid data. > - */ > - LLVMInvalidateStructLayout(gallivm->target, dvbuffer_type); > -#endif > - > LP_CHECK_MEMBER_OFFSET(struct draw_vertex_buffer, map, > target, dvbuffer_type, > DRAW_JIT_DVBUFFER_MAP); > @@ -142,15 +133,6 @@ create_jit_texture_type(struct gallivm_state *gallivm, > const char *struct_name) > texture_type = LLVMStructTypeInContext(gallivm->context, elem_types, > Elements(elem_types), 0); > > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, struct_name, texture_type); > - > - /* Make sure the target's struct layout cache doesn't return > - * stale/invalid data. > - */ > - LLVMInvalidateStructLayout(gallivm->target, texture_type); > -#endif > - > LP_CHECK_MEMBER_OFFSET(struct draw_jit_texture, width, > target, texture_type, > DRAW_JIT_TEXTURE_WIDTH); > @@ -204,15 +186,6 @@ create_jit_sampler_type(struct gallivm_state *gallivm, > const char *struct_name) > sampler_type = LLVMStructTypeInContext(gallivm->context, elem_types, > Elements(elem_types), 0); > > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, struct_name, sampler_type); > - > - /* Make sure the target's struct layout cache doesn't return > - * stale/invalid data. > - */ > - LLVMInvalidateStructLayout(gallivm->target, sampler_type); > -#endif > - > LP_CHECK_MEMBER_OFFSET(struct draw_jit_sampler, min_lod, > target, sampler_type, > DRAW_JIT_SAMPLER_MIN_LOD); > @@ -259,12 +232,6 @@ create_jit_context_type(struct gallivm_state *gallivm, > PIPE_MAX_SAMPLERS); /* samplers */ > context_type = LLVMStructTypeInContext(gallivm->context, elem_types, > Elements(elem_types), 0); > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, struct_name, context_type); > - > - LLVMInvalidateStructLayout(gallivm->target, context_type); > -#endif > - > LP_CHECK_MEMBER_OFFSET(struct draw_jit_context, vs_constants, > target, context_type, DRAW_JIT_CTX_CONSTANTS); > LP_CHECK_MEMBER_OFFSET(struct draw_jit_context, num_vs_constants, > @@ -322,11 +289,6 @@ create_gs_jit_context_type(struct gallivm_state *gallivm, > > context_type = LLVMStructTypeInContext(gallivm->context, elem_types, > Elements(elem_types), 0); > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, struct_name, context_type); > - > - LLVMInvalidateStructLayout(gallivm->target, context_type); > -#endif > > LP_CHECK_MEMBER_OFFSET(struct draw_gs_jit_context, constants, > target, context_type, DRAW_GS_JIT_CTX_CONSTANTS); > @@ -390,11 +352,6 @@ create_jit_vertex_buffer_type(struct gallivm_state > *gallivm, > > vb_type = LLVMStructTypeInContext(gallivm->context, elem_types, > Elements(elem_types), 0); > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, struct_name, vb_type); > - > - LLVMInvalidateStructLayout(gallivm->target, vb_type); > -#endif > > LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, stride, > target, vb_type, 0); > @@ -427,11 +384,6 @@ create_jit_vertex_header(struct gallivm_state *gallivm, > int data_elems) > > vertex_header = LLVMStructTypeInContext(gallivm->context, elem_types, > Elements(elem_types), 0); > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, struct_name, vertex_header); > - > - LLVMInvalidateStructLayout(gallivm->target, vertex_header); > -#endif > > /* these are bit-fields and we can't take address of them > LP_CHECK_MEMBER_OFFSET(struct vertex_header, clipmask, > diff --git a/src/gallium/auxiliary/gallivm/lp_bld.h > b/src/gallium/auxiliary/gallivm/lp_bld.h > index ee05c6b..fcf4f16 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld.h > +++ b/src/gallium/auxiliary/gallivm/lp_bld.h > @@ -53,6 +53,9 @@ > #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" > +#endif > > > /** > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c > b/src/gallium/auxiliary/gallivm/lp_bld_arit.c > index e516ae8..3d34144 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c > @@ -1499,11 +1499,9 @@ lp_build_negate(struct lp_build_context *bld, > > assert(lp_check_value(bld->type, a)); > > -#if HAVE_LLVM >= 0x0207 > if (bld->type.floating) > a = LLVMBuildFNeg(builder, a, ""); > else > -#endif > a = LLVMBuildNeg(builder, a, ""); > > return a; > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_conv.c > b/src/gallium/auxiliary/gallivm/lp_bld_conv.c > index 712ce5f..d3bf621 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_conv.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_conv.c > @@ -101,7 +101,7 @@ lp_build_half_to_float(struct gallivm_state *gallivm, > LLVMTypeRef int_vec_type = lp_build_vec_type(gallivm, i32_type); > LLVMValueRef h; > > - if (util_cpu_caps.has_f16c && HAVE_LLVM >= 0x0301 && > + if (util_cpu_caps.has_f16c && > (src_length == 4 || src_length == 8)) { > const char *intrinsic = NULL; > if (src_length == 4) { > @@ -143,7 +143,7 @@ lp_build_float_to_half(struct gallivm_state *gallivm, > struct lp_type i16_type = lp_type_int_vec(16, 16 * length); > LLVMValueRef result; > > - if (util_cpu_caps.has_f16c && HAVE_LLVM >= 0x0301 && > + if (util_cpu_caps.has_f16c && > (length == 4 || length == 8)) { > struct lp_type i168_type = lp_type_int_vec(16, 16 * 8); > unsigned mode = 3; /* same as LP_BUILD_ROUND_TRUNCATE */ > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp > b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp > index 7e43b51..85953a2 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp > +++ b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp > @@ -34,28 +34,16 @@ > #include <llvm/Support/Format.h> > #include <llvm/Support/MemoryObject.h> > > -#if HAVE_LLVM >= 0x0300 > #include <llvm/Support/TargetRegistry.h> > #include <llvm/MC/MCSubtargetInfo.h> > -#else /* HAVE_LLVM < 0x0300 */ > -#include <llvm/Target/TargetRegistry.h> > -#endif /* HAVE_LLVM < 0x0300 */ > > -#if HAVE_LLVM >= 0x0209 > #include <llvm/Support/Host.h> > -#else /* HAVE_LLVM < 0x0209 */ > -#include <llvm/System/Host.h> > -#endif /* HAVE_LLVM < 0x0209 */ > > -#if HAVE_LLVM >= 0x0207 > #include <llvm/MC/MCDisassembler.h> > #include <llvm/MC/MCAsmInfo.h> > #include <llvm/MC/MCInst.h> > #include <llvm/MC/MCInstPrinter.h> > -#endif /* HAVE_LLVM >= 0x0207 */ > -#if HAVE_LLVM >= 0x0301 > #include <llvm/MC/MCRegisterInfo.h> > -#endif /* HAVE_LLVM >= 0x0301 */ > > #if HAVE_LLVM >= 0x0303 > #include <llvm/ADT/OwningPtr.h> > @@ -104,13 +92,8 @@ public: > > void write_impl(const char *Ptr, size_t Size); > > -#if HAVE_LLVM >= 0x207 > uint64_t current_pos() const { return pos; } > size_t preferred_buffer_size() const { return 512; } > -#else > - uint64_t current_pos() { return pos; } > - size_t preferred_buffer_size() { return 512; } > -#endif > }; > > > @@ -144,7 +127,6 @@ lp_debug_dump_value(LLVMValueRef value) > } > > > -#if HAVE_LLVM >= 0x0207 > /* > * MemoryObject wrapper around a buffer of memory, to be used by MC > * disassembler. > @@ -179,7 +161,6 @@ public: > return 0; > } > }; > -#endif /* HAVE_LLVM >= 0x0207 */ > > > /* > @@ -192,7 +173,6 @@ public: > static size_t > disassemble(const void* func, llvm::raw_ostream & Out) > { > -#if HAVE_LLVM >= 0x0207 > using namespace llvm; > > const uint8_t *bytes = (const uint8_t *)func; > @@ -208,21 +188,15 @@ disassemble(const void* func, llvm::raw_ostream & Out) > * Initialize all used objects. > */ > > -#if HAVE_LLVM >= 0x0301 > std::string Triple = sys::getDefaultTargetTriple(); > -#else > - std::string Triple = sys::getHostTriple(); > -#endif > > std::string Error; > const Target *T = TargetRegistry::lookupTarget(Triple, Error); > > #if HAVE_LLVM >= 0x0304 > OwningPtr<const MCAsmInfo> > AsmInfo(T->createMCAsmInfo(*T->createMCRegInfo(Triple), Triple)); > -#elif HAVE_LLVM >= 0x0300 > - OwningPtr<const MCAsmInfo> AsmInfo(T->createMCAsmInfo(Triple)); > #else > - OwningPtr<const MCAsmInfo> AsmInfo(T->createAsmInfo(Triple)); > + OwningPtr<const MCAsmInfo> AsmInfo(T->createMCAsmInfo(Triple)); > #endif > > if (!AsmInfo) { > @@ -230,13 +204,8 @@ disassemble(const void* func, llvm::raw_ostream & Out) > return 0; > } > > -#if HAVE_LLVM >= 0x0300 > unsigned int AsmPrinterVariant = AsmInfo->getAssemblerDialect(); > -#else > - int AsmPrinterVariant = AsmInfo->getAssemblerDialect(); > -#endif > > -#if HAVE_LLVM >= 0x0301 > OwningPtr<const MCRegisterInfo> MRI(T->createMCRegInfo(Triple)); > if (!MRI) { > Out << "error: no register info for target " << Triple.c_str() << "\n"; > @@ -248,17 +217,14 @@ disassemble(const void* func, llvm::raw_ostream & Out) > Out << "error: no instruction info for target " << Triple.c_str() << > "\n"; > return 0; > } > -#endif > > #if HAVE_LLVM >= 0x0305 > OwningPtr<const MCSubtargetInfo> STI(T->createMCSubtargetInfo(Triple, > sys::getHostCPUName(), "")); > OwningPtr<MCContext> MCCtx(new MCContext(AsmInfo.get(), MRI.get(), 0)); > OwningPtr<const MCDisassembler> DisAsm(T->createMCDisassembler(*STI, > *MCCtx)); > -#elif HAVE_LLVM >= 0x0300 > +#else > OwningPtr<const MCSubtargetInfo> STI(T->createMCSubtargetInfo(Triple, > sys::getHostCPUName(), "")); > OwningPtr<const MCDisassembler> DisAsm(T->createMCDisassembler(*STI)); > -#else > - OwningPtr<const MCDisassembler> DisAsm(T->createMCDisassembler()); > #endif > if (!DisAsm) { > Out << "error: no disassembler for target " << Triple << "\n"; > @@ -266,25 +232,13 @@ disassemble(const void* func, llvm::raw_ostream & Out) > } > > > -#if HAVE_LLVM >= 0x0301 > OwningPtr<MCInstPrinter> Printer( > T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo, *MII, *MRI, > *STI)); > -#elif HAVE_LLVM == 0x0300 > - OwningPtr<MCInstPrinter> Printer( > - T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo, *STI)); > -#elif HAVE_LLVM >= 0x0208 > - OwningPtr<MCInstPrinter> Printer( > - T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo)); > -#else > - OwningPtr<MCInstPrinter> Printer( > - T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo, Out)); > -#endif > if (!Printer) { > Out << "error: no instruction printer for target " << Triple.c_str() > << "\n"; > return 0; > } > > -#if HAVE_LLVM >= 0x0301 > TargetOptions options; > #if defined(DEBUG) > options.JITEmitDebugInfo = true; > @@ -296,11 +250,6 @@ disassemble(const void* func, llvm::raw_ostream & Out) > options.NoFramePointerElim = true; > #endif > OwningPtr<TargetMachine> TM(T->createTargetMachine(Triple, > sys::getHostCPUName(), "", options)); > -#elif HAVE_LLVM == 0x0300 > - OwningPtr<TargetMachine> TM(T->createTargetMachine(Triple, > sys::getHostCPUName(), "")); > -#else > - OwningPtr<TargetMachine> TM(T->createTargetMachine(Triple, "")); > -#endif > > const TargetInstrInfo *TII = TM->getInstrInfo(); > > @@ -324,11 +273,7 @@ disassemble(const void* func, llvm::raw_ostream & Out) > > if (!DisAsm->getInstruction(Inst, Size, memoryObject, > pc, > -#if HAVE_LLVM >= 0x0300 > nulls(), nulls())) { > -#else > - nulls())) { > -#endif > Out << "invalid"; > pc += 1; > } > @@ -350,13 +295,7 @@ disassemble(const void* func, llvm::raw_ostream & Out) > /* > * Print the instruction. > */ > -#if HAVE_LLVM >= 0x0300 > - Printer->printInst(&Inst, Out, ""); > -#elif HAVE_LLVM >= 0x208 > - Printer->printInst(&Inst, Out); > -#else > - Printer->printInst(&Inst); > -#endif > + Printer->printInst(&Inst, Out, ""); > > /* > * Advance. > @@ -364,11 +303,7 @@ disassemble(const void* func, llvm::raw_ostream & Out) > > pc += Size; > > -#if HAVE_LLVM >= 0x0300 > const MCInstrDesc &TID = TII->get(Inst.getOpcode()); > -#else > - const TargetInstrDesc &TID = TII->get(Inst.getOpcode()); > -#endif > > /* > * Keep track of forward jumps to a nearby address. > @@ -445,10 +380,6 @@ disassemble(const void* func, llvm::raw_ostream & Out) > Out.flush(); > > return pc; > -#else /* HAVE_LLVM < 0x0207 */ > - (void)func; > - return 0; > -#endif /* HAVE_LLVM < 0x0207 */ > } > > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c > b/src/gallium/auxiliary/gallivm/lp_bld_init.c > index 61b561f..85faef5 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_init.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c > @@ -104,28 +104,13 @@ unsigned lp_native_vector_width; > * See also CodeGenOpt::Level in llvm/Target/TargetMachine.h > */ > enum LLVM_CodeGenOpt_Level { > -#if HAVE_LLVM >= 0x207 > None, // -O0 > Less, // -O1 > Default, // -O2, -Os > Aggressive // -O3 > -#else > - Default, > - None, > - Aggressive > -#endif > }; > > > -#if HAVE_LLVM <= 0x0206 > -/** > - * LLVM 2.6 permits only one ExecutionEngine to be created. So use the > - * same gallivm state everywhere. > - */ > -static struct gallivm_state *GlobalGallivm = NULL; > -#endif > - > - > /** > * Create the LLVM (optimization) pass manager and install > * relevant optimization passes. > @@ -153,8 +138,8 @@ create_pass_manager(struct gallivm_state *gallivm) > LLVMAddCFGSimplificationPass(gallivm->passmgr); > LLVMAddReassociatePass(gallivm->passmgr); > > - if (HAVE_LLVM >= 0x207 && sizeof(void*) == 4) { > - /* For LLVM >= 2.7 and 32-bit build, use this order of passes to > + if (sizeof(void*) == 4) { > + /* XXX: For LLVM >= 2.7 and 32-bit build, use this order of passes > to > * avoid generating bad code. > * Test with piglit glsl-vs-sqrt-zero test. > */ > @@ -192,7 +177,6 @@ create_pass_manager(struct gallivm_state *gallivm) > static void > free_gallivm_state(struct gallivm_state *gallivm) > { > -#if HAVE_LLVM >= 0x207 /* XXX or 0x208? */ > /* This leads to crashes w/ some versions of LLVM */ > LLVMModuleRef mod; > char *error; > @@ -200,7 +184,6 @@ free_gallivm_state(struct gallivm_state *gallivm) > if (gallivm->engine && gallivm->provider) > LLVMRemoveModuleProvider(gallivm->engine, gallivm->provider, > &mod, &error); > -#endif > > if (gallivm->passmgr) { > LLVMDisposePassManager(gallivm->passmgr); > @@ -212,12 +195,8 @@ free_gallivm_state(struct gallivm_state *gallivm) > LLVMDisposeModuleProvider(gallivm->provider); > #endif > > - if (HAVE_LLVM >= 0x207 && gallivm->engine) { > - /* This will already destroy any associated module */ > - LLVMDisposeExecutionEngine(gallivm->engine); > - } else { > - LLVMDisposeModule(gallivm->module); > - } > + /* This will already destroy any associated module */ > + LLVMDisposeExecutionEngine(gallivm->engine); > > #if !USE_MCJIT > /* Don't free the TargetData, it's owned by the exec engine */ > @@ -251,7 +230,6 @@ static boolean > init_gallivm_engine(struct gallivm_state *gallivm) > { > if (1) { > - /* We can only create one LLVMExecutionEngine (w/ LLVM 2.6 anyway) */ > enum LLVM_CodeGenOpt_Level optlevel; > char *error = NULL; > int ret; > @@ -263,16 +241,11 @@ init_gallivm_engine(struct gallivm_state *gallivm) > optlevel = Default; > } > > -#if HAVE_LLVM >= 0x0301 > ret = lp_build_create_jit_compiler_for_module(&gallivm->engine, > gallivm->module, > (unsigned) optlevel, > USE_MCJIT, > &error); > -#else > - ret = LLVMCreateJITCompiler(&gallivm->engine, gallivm->provider, > - (unsigned) optlevel, &error); > -#endif > if (ret) { > _debug_printf("%s\n", error); > LLVMDisposeMessage(error); > @@ -527,12 +500,6 @@ gallivm_create(void) > { > struct gallivm_state *gallivm; > > -#if HAVE_LLVM <= 0x206 > - if (GlobalGallivm) { > - return GlobalGallivm; > - } > -#endif > - > gallivm = CALLOC_STRUCT(gallivm_state); > if (gallivm) { > if (!init_gallivm_state(gallivm)) { > @@ -541,10 +508,6 @@ gallivm_create(void) > } > } > > -#if HAVE_LLVM <= 0x206 > - GlobalGallivm = gallivm; > -#endif > - > return gallivm; > } > > @@ -555,13 +518,8 @@ gallivm_create(void) > void > gallivm_destroy(struct gallivm_state *gallivm) > { > -#if HAVE_LLVM <= 0x0206 > - /* No-op: don't destroy the singleton */ > - (void) gallivm; > -#else > free_gallivm_state(gallivm); > FREE(gallivm); > -#endif > } > > > @@ -620,9 +578,7 @@ gallivm_verify_function(struct gallivm_state *gallivm, > void > gallivm_compile_module(struct gallivm_state *gallivm) > { > -#if HAVE_LLVM > 0x206 > assert(!gallivm->compiled); > -#endif > > /* Dump byte code to a file */ > if (0) { > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_logic.c > b/src/gallium/auxiliary/gallivm/lp_bld_logic.c > index fc7a728..80b53e5 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_logic.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_logic.c > @@ -123,35 +123,8 @@ lp_build_compare_ext(struct gallivm_state *gallivm, > return lp_build_undef(gallivm, type); > } > > -#if HAVE_LLVM >= 0x0207 > cond = LLVMBuildFCmp(builder, op, a, b, ""); > res = LLVMBuildSExt(builder, cond, int_vec_type, ""); > -#else > - if (type.length == 1) { > - cond = LLVMBuildFCmp(builder, op, a, b, ""); > - res = LLVMBuildSExt(builder, cond, int_vec_type, ""); > - } > - else { > - unsigned i; > - > - res = LLVMGetUndef(int_vec_type); > - > - debug_printf("%s: warning: using slow element-wise float" > - " vector comparison\n", __FUNCTION__); > - for (i = 0; i < type.length; ++i) { > - LLVMValueRef index = lp_build_const_int32(gallivm, i); > - cond = LLVMBuildFCmp(builder, op, > - LLVMBuildExtractElement(builder, a, index, > ""), > - LLVMBuildExtractElement(builder, b, index, > ""), > - ""); > - cond = LLVMBuildSelect(builder, cond, > - LLVMConstExtractElement(ones, index), > - LLVMConstExtractElement(zeros, index), > - ""); > - res = LLVMBuildInsertElement(builder, res, cond, index, ""); > - } > - } > -#endif > } > else { > LLVMIntPredicate op; > @@ -179,38 +152,8 @@ lp_build_compare_ext(struct gallivm_state *gallivm, > return lp_build_undef(gallivm, type); > } > > -#if HAVE_LLVM >= 0x0207 > cond = LLVMBuildICmp(builder, op, a, b, ""); > res = LLVMBuildSExt(builder, cond, int_vec_type, ""); > -#else > - if (type.length == 1) { > - cond = LLVMBuildICmp(builder, op, a, b, ""); > - res = LLVMBuildSExt(builder, cond, int_vec_type, ""); > - } > - else { > - unsigned i; > - > - res = LLVMGetUndef(int_vec_type); > - > - if (gallivm_debug & GALLIVM_DEBUG_PERF) { > - debug_printf("%s: using slow element-wise int" > - " vector comparison\n", __FUNCTION__); > - } > - > - for(i = 0; i < type.length; ++i) { > - LLVMValueRef index = lp_build_const_int32(gallivm, i); > - cond = LLVMBuildICmp(builder, op, > - LLVMBuildExtractElement(builder, a, index, > ""), > - LLVMBuildExtractElement(builder, b, index, > ""), > - ""); > - cond = LLVMBuildSelect(builder, cond, > - LLVMConstExtractElement(ones, index), > - LLVMConstExtractElement(zeros, index), > - ""); > - res = LLVMBuildInsertElement(builder, res, cond, index, ""); > - } > - } > -#endif > } > > return res; > @@ -260,138 +203,6 @@ lp_build_compare(struct gallivm_state *gallivm, > } > #endif > > -#if HAVE_LLVM < 0x0207 > -#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) > - if(type.width * type.length == 128) { > - LLVMBuilderRef builder = gallivm->builder; > - LLVMValueRef cond; > - LLVMValueRef res; > - if(type.floating && util_cpu_caps.has_sse) { > - /* float[4] comparison */ > - LLVMTypeRef vec_type = lp_build_vec_type(gallivm, type); > - LLVMValueRef args[3]; > - unsigned cc; > - boolean swap; > - > - swap = FALSE; > - switch(func) { > - case PIPE_FUNC_EQUAL: > - cc = 0; > - break; > - case PIPE_FUNC_NOTEQUAL: > - cc = 4; > - break; > - case PIPE_FUNC_LESS: > - cc = 1; > - break; > - case PIPE_FUNC_LEQUAL: > - cc = 2; > - break; > - case PIPE_FUNC_GREATER: > - cc = 1; > - swap = TRUE; > - break; > - case PIPE_FUNC_GEQUAL: > - cc = 2; > - swap = TRUE; > - break; > - default: > - assert(0); > - return lp_build_undef(gallivm, type); > - } > - > - if(swap) { > - args[0] = b; > - args[1] = a; > - } > - else { > - args[0] = a; > - args[1] = b; > - } > - > - args[2] = LLVMConstInt(LLVMInt8TypeInContext(gallivm->context), cc, > 0); > - res = lp_build_intrinsic(builder, > - "llvm.x86.sse.cmp.ps", > - vec_type, > - args, 3); > - res = LLVMBuildBitCast(builder, res, int_vec_type, ""); > - return res; > - } > - else if(util_cpu_caps.has_sse2) { > - /* int[4] comparison */ > - static const struct { > - unsigned swap:1; > - unsigned eq:1; > - unsigned gt:1; > - unsigned not:1; > - } table[] = { > - {0, 0, 0, 1}, /* PIPE_FUNC_NEVER */ > - {1, 0, 1, 0}, /* PIPE_FUNC_LESS */ > - {0, 1, 0, 0}, /* PIPE_FUNC_EQUAL */ > - {0, 0, 1, 1}, /* PIPE_FUNC_LEQUAL */ > - {0, 0, 1, 0}, /* PIPE_FUNC_GREATER */ > - {0, 1, 0, 1}, /* PIPE_FUNC_NOTEQUAL */ > - {1, 0, 1, 1}, /* PIPE_FUNC_GEQUAL */ > - {0, 0, 0, 0} /* PIPE_FUNC_ALWAYS */ > - }; > - const char *pcmpeq; > - const char *pcmpgt; > - LLVMValueRef args[2]; > - LLVMValueRef res; > - LLVMTypeRef vec_type = lp_build_vec_type(gallivm, type); > - > - switch (type.width) { > - case 8: > - pcmpeq = "llvm.x86.sse2.pcmpeq.b"; > - pcmpgt = "llvm.x86.sse2.pcmpgt.b"; > - break; > - case 16: > - pcmpeq = "llvm.x86.sse2.pcmpeq.w"; > - pcmpgt = "llvm.x86.sse2.pcmpgt.w"; > - break; > - case 32: > - pcmpeq = "llvm.x86.sse2.pcmpeq.d"; > - pcmpgt = "llvm.x86.sse2.pcmpgt.d"; > - break; > - default: > - assert(0); > - return lp_build_undef(gallivm, type); > - } > - > - /* There are no unsigned comparison instructions. So flip the sign > bit > - * so that the results match. > - */ > - if (table[func].gt && !type.sign) { > - LLVMValueRef msb = lp_build_const_int_vec(gallivm, type, > (unsigned long long)1 << (type.width - 1)); > - a = LLVMBuildXor(builder, a, msb, ""); > - b = LLVMBuildXor(builder, b, msb, ""); > - } > - > - if(table[func].swap) { > - args[0] = b; > - args[1] = a; > - } > - else { > - args[0] = a; > - args[1] = b; > - } > - > - if(table[func].eq) > - res = lp_build_intrinsic(builder, pcmpeq, vec_type, args, 2); > - else if (table[func].gt) > - res = lp_build_intrinsic(builder, pcmpgt, vec_type, args, 2); > - else > - res = LLVMConstNull(vec_type); > - > - if(table[func].not) > - res = LLVMBuildNot(builder, res, ""); > - > - return res; > - } > - } /* if (type.width * type.length == 128) */ > -#endif > -#endif /* HAVE_LLVM < 0x0207 */ > - > return lp_build_compare_ext(gallivm, type, func, a, b, FALSE); > } > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > index 65c02d8..fe45940 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > @@ -54,18 +54,12 @@ > #include <llvm-c/ExecutionEngine.h> > #include <llvm/Target/TargetOptions.h> > #include <llvm/ExecutionEngine/ExecutionEngine.h> > -#if HAVE_LLVM >= 0x0301 > #include <llvm/ADT/Triple.h> > #include <llvm/ExecutionEngine/JITMemoryManager.h> > -#endif > #include <llvm/Support/CommandLine.h> > #include <llvm/Support/PrettyStackTrace.h> > > -#if HAVE_LLVM >= 0x0300 > #include <llvm/Support/TargetSelect.h> > -#else /* HAVE_LLVM < 0x0300 */ > -#include <llvm/Target/TargetSelect.h> > -#endif /* HAVE_LLVM < 0x0300 */ > > #if HAVE_LLVM >= 0x0303 > #include <llvm/IR/IRBuilder.h> > @@ -104,76 +98,6 @@ static LLVMEnsureMultithreaded lLVMEnsureMultithreaded; > extern "C" void > lp_set_target_options(void) > { > -#if HAVE_LLVM <= 0x0300 > -#if defined(DEBUG) > -#if HAVE_LLVM >= 0x0207 > - llvm::JITEmitDebugInfo = true; > -#endif > -#endif > - > - /* > - * LLVM revision 123367 switched the default stack alignment to 16 bytes > on > - * Linux (and several other Unices in later revisions), to match recent > gcc > - * versions. > - * > - * However our drivers can be loaded by old binary applications, still > - * maintaining a 4 bytes stack alignment. Therefore we must tell LLVM > here > - * to only assume a 4 bytes alignment for backwards compatibility. > - */ > -#if defined(PIPE_ARCH_X86) > -#if HAVE_LLVM == 0x0300 > - llvm::StackAlignmentOverride = 4; > -#else > - llvm::StackAlignment = 4; > -#endif > -#endif > - > -#if defined(DEBUG) || defined(PROFILE) > - llvm::NoFramePointerElim = true; > -#if HAVE_LLVM >= 0x0208 > - llvm::NoFramePointerElimNonLeaf = true; > -#endif > -#endif > - > - llvm::NoExcessFPPrecision = false; > - > - /* XXX: Investigate this */ > -#if 0 > - llvm::UnsafeFPMath = true; > -#endif > -#endif /* HAVE_LLVM <= 0x0300 */ > - > -#if HAVE_LLVM < 0x0209 > - /* > - * LLVM will generate MMX instructions for vectors <= 64 bits, leading to > - * innefficient code, and in 32bit systems, to the corruption of the FPU > - * stack given that it expects the user to generate the EMMS instructions. > - * > - * See also: > - * - http://llvm.org/bugs/show_bug.cgi?id=3287 > - * - > http://l4.me.uk/post/2009/06/07/llvm-wrinkle-3-configuration-what-configuration/ > - * > - * The -disable-mmx global option can be specified only once since we > - * dynamically link against LLVM it will reside in a separate shared > object, > - * which may or not be delete when this shared object is, so we use the > - * llvm::DisablePrettyStackTrace variable (which we set below and should > - * reside in the same shared library) to determine whether the > -disable-mmx > - * option has been set or not. > - * > - * Thankfully this ugly hack is not necessary on LLVM 2.9 onwards. > - */ > - if (!llvm::DisablePrettyStackTrace) { > - static boolean first = TRUE; > - static const char* options[] = { > - "prog", > - "-disable-mmx" > - }; > - assert(first); > - llvm::cl::ParseCommandLineOptions(2, const_cast<char**>(options)); > - first = FALSE; > - } > -#endif > - > #if HAVE_LLVM < 0x0304 > /* > * By default LLVM adds a signal handler to output a pretty stack trace. > @@ -187,25 +111,9 @@ lp_set_target_options(void) > // usable by the JIT. > llvm::InitializeNativeTarget(); > > -#if HAVE_LLVM >= 0x0208 > llvm::InitializeNativeTargetAsmPrinter(); > -#elif defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) > - LLVMInitializeX86AsmPrinter(); > -#elif defined(PIPE_ARCH_ARM) > - LLVMInitializeARMAsmPrinter(); > -#elif defined(PIPE_ARCH_PPC) > - LLVMInitializePowerPCAsmPrinter(); > -#endif > > -#if HAVE_LLVM >= 0x0207 > -# if HAVE_LLVM >= 0x0301 > llvm::InitializeNativeTargetDisassembler(); > -# elif defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) > - LLVMInitializeX86Disassembler(); > -# elif defined(PIPE_ARCH_ARM) > - LLVMInitializeARMDisassembler(); > -# endif > -#endif > } > > > @@ -243,8 +151,6 @@ lp_set_store_alignment(LLVMValueRef Inst, > } > > > -#if HAVE_LLVM >= 0x301 > - > /** > * Same as LLVMCreateJITCompilerForModule, but: > * - allows using MCJIT and enabling AVX feature where available. > @@ -335,5 +241,3 @@ > lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT, > *OutError = strdup(Error.c_str()); > return 1; > } > - > -#endif /* HAVE_LLVM >= 0x301 */ > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_pack.c > b/src/gallium/auxiliary/gallivm/lp_bld_pack.c > index 2b0a1fb..a48a922 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_pack.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_pack.c > @@ -455,10 +455,6 @@ lp_build_pack2(struct gallivm_state *gallivm, > LLVMValueRef res = NULL; > struct lp_type intr_type = dst_type; > > -#if HAVE_LLVM < 0x0207 > - intr_type = src_type; > -#endif > - > assert(!src_type.floating); > assert(!dst_type.floating); > assert(src_type.width == dst_type.width * 2); > @@ -478,10 +474,6 @@ lp_build_pack2(struct gallivm_state *gallivm, > else { > if (util_cpu_caps.has_sse4_1) { > intrinsic = "llvm.x86.sse41.packusdw"; > -#if HAVE_LLVM < 0x0207 > - /* llvm < 2.7 has inconsistent signatures except for > packusdw */ > - intr_type = dst_type; > -#endif > } > } > } else if (util_cpu_caps.has_altivec) { > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c > b/src/gallium/auxiliary/gallivm/lp_bld_sample.c > index e60a035..aeecba8 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c > @@ -976,15 +976,6 @@ lp_build_linear_mip_levels(struct > lp_build_sample_context *bld, > * ends in the process. > */ > > - /* > - * This code (vector select in particular) only works with llvm 3.1 > - * (if there's more than one quad, with x86 backend). Might consider > - * converting to our lp_bld_logic helpers. > - */ > -#if HAVE_LLVM < 0x0301 > - assert(leveli_bld->type.length == 1); > -#endif > - > /* *level0_out < first_level */ > clamp_min = LLVMBuildICmp(builder, LLVMIntSLT, > *level0_out, first_level, > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c > b/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c > index 2bbe115..2f02606 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c > @@ -1543,16 +1543,6 @@ lp_build_sample_mipmap(struct lp_build_sample_context > *bld, > if (num_quads == 1 && bld->num_lods == 1) { > lod_fpart = LLVMBuildTrunc(builder, lod_fpart, > u8n_bld.elem_type, ""); > lod_fpart = lp_build_broadcast_scalar(&u8n_bld, lod_fpart); > - > -#if HAVE_LLVM == 0x208 > - /* This was a work-around for a bug in LLVM 2.8. > - * Evidently, something goes wrong in the construction of the > - * lod_fpart short[8] vector. Adding this no-effect shuffle > seems > - * to force the vector to be properly constructed. > - * Tested with mesa-demos/src/tests/mipmap_limits.c (press t, f). > - */ > -#error Unsupported > -#endif > } > else { > unsigned num_chans_per_lod = 4 * bld->coord_type.length / > bld->num_lods; > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c > b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c > index e8c04d1..e29f503 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c > @@ -1775,20 +1775,10 @@ lp_build_sample_common(struct lp_build_sample_context > *bld, > /* fall-through */ > case PIPE_TEX_MIPFILTER_NONE: > /* always use mip level 0 */ > - if (HAVE_LLVM == 0x0207 && target == PIPE_TEXTURE_CUBE) { > - /* XXX this is a work-around for an apparent bug in LLVM 2.7. > - * We should be able to set ilevel0 = const(0) but that causes > - * bad x86 code to be emitted. > - */ > - assert(lod_ipart); > - lp_build_nearest_mip_level(bld, texture_index, lod_ipart, ilevel0, > NULL); > - } > - else { > - first_level = bld->dynamic_state->first_level(bld->dynamic_state, > - bld->gallivm, > texture_index); > - first_level = lp_build_broadcast_scalar(&bld->leveli_bld, > first_level); > - *ilevel0 = first_level; > - } > + first_level = bld->dynamic_state->first_level(bld->dynamic_state, > + bld->gallivm, > texture_index); > + first_level = lp_build_broadcast_scalar(&bld->leveli_bld, first_level); > + *ilevel0 = first_level; > break; > case PIPE_TEX_MIPFILTER_NEAREST: > assert(lod_ipart); > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_swizzle.c > b/src/gallium/auxiliary/gallivm/lp_bld_swizzle.c > index 9557e1c..b1aef71 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_swizzle.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_swizzle.c > @@ -58,24 +58,14 @@ lp_build_broadcast(struct gallivm_state *gallivm, > LLVMBuilderRef builder = gallivm->builder; > const unsigned length = LLVMGetVectorSize(vec_type); > LLVMValueRef undef = LLVMGetUndef(vec_type); > + /* The shuffle vector is always made of int32 elements */ > LLVMTypeRef i32_type = LLVMInt32TypeInContext(gallivm->context); > + LLVMTypeRef i32_vec_type = LLVMVectorType(i32_type, length); > > assert(LLVMGetElementType(vec_type) == LLVMTypeOf(scalar)); > > - if (HAVE_LLVM >= 0x207) { > - /* The shuffle vector is always made of int32 elements */ > - LLVMTypeRef i32_vec_type = LLVMVectorType(i32_type, length); > - res = LLVMBuildInsertElement(builder, undef, scalar, > LLVMConstNull(i32_type), ""); > - res = LLVMBuildShuffleVector(builder, res, undef, > LLVMConstNull(i32_vec_type), ""); > - } else { > - /* XXX: The above path provokes a bug in LLVM 2.6 */ > - unsigned i; > - res = undef; > - for(i = 0; i < length; ++i) { > - LLVMValueRef index = lp_build_const_int32(gallivm, i); > - res = LLVMBuildInsertElement(builder, res, scalar, index, ""); > - } > - } > + res = LLVMBuildInsertElement(builder, undef, scalar, > LLVMConstNull(i32_type), ""); > + res = LLVMBuildShuffleVector(builder, res, undef, > LLVMConstNull(i32_vec_type), ""); > } > > return res; > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.c > b/src/gallium/auxiliary/gallivm/lp_bld_type.c > index 6c3aa38..9b25e15 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_type.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.c > @@ -311,18 +311,10 @@ lp_typekind_name(LLVMTypeKind t) > return "LLVMArrayTypeKind"; > case LLVMPointerTypeKind: > return "LLVMPointerTypeKind"; > -#if HAVE_LLVM < 0x0300 > - case LLVMOpaqueTypeKind: > - return "LLVMOpaqueTypeKind"; > -#endif > case LLVMVectorTypeKind: > return "LLVMVectorTypeKind"; > case LLVMMetadataTypeKind: > return "LLVMMetadataTypeKind"; > -#if HAVE_LLVM == 0x0207 > - case LLVMUnionTypeKind: > - return "LLVMUnionTypeKind"; > -#endif > default: > return "unknown LLVMTypeKind"; > } > diff --git a/src/gallium/drivers/llvmpipe/lp_jit.c > b/src/gallium/drivers/llvmpipe/lp_jit.c > index 075bd14..261702f 100644 > --- a/src/gallium/drivers/llvmpipe/lp_jit.c > +++ b/src/gallium/drivers/llvmpipe/lp_jit.c > @@ -57,12 +57,6 @@ lp_jit_create_types(struct lp_fragment_shader_variant *lp) > viewport_type = LLVMStructTypeInContext(lc, elem_types, > Elements(elem_types), 0); > > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, "viewport", viewport_type); > - > - LLVMInvalidateStructLayout(gallivm->target, viewport_type); > -#endif > - > LP_CHECK_MEMBER_OFFSET(struct lp_jit_viewport, min_depth, > gallivm->target, viewport_type, > LP_JIT_VIEWPORT_MIN_DEPTH); > @@ -90,11 +84,6 @@ lp_jit_create_types(struct lp_fragment_shader_variant *lp) > > texture_type = LLVMStructTypeInContext(lc, elem_types, > Elements(elem_types), 0); > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, "texture", texture_type); > - > - LLVMInvalidateStructLayout(gallivm->target, texture_type); > -#endif > > LP_CHECK_MEMBER_OFFSET(struct lp_jit_texture, width, > gallivm->target, texture_type, > @@ -138,11 +127,6 @@ lp_jit_create_types(struct lp_fragment_shader_variant > *lp) > > sampler_type = LLVMStructTypeInContext(lc, elem_types, > Elements(elem_types), 0); > -#if HAVE_LLVM < 0x0300 > - LLVMAddTypeName(gallivm->module, "sampler", sampler_type); > - > - LLVMInvalidateStructLayout(gallivm->target, sampler_type); > -#endif > > LP_CHECK_MEMBER_OFFSET(struct lp_jit_sampler, min_lod, > gallivm->target, sampler_type, > @@ -183,12 +167,6 @@ lp_jit_create_types(struct lp_fragment_shader_variant > *lp) > context_type = LLVMStructTypeInContext(lc, elem_types, > Elements(elem_types), 0); > > -#if HAVE_LLVM < 0x0300 > - LLVMInvalidateStructLayout(gallivm->target, context_type); > - > - LLVMAddTypeName(gallivm->module, "context", context_type); > -#endif > - > LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, constants, > gallivm->target, context_type, > LP_JIT_CTX_CONSTANTS); > @@ -237,12 +215,6 @@ lp_jit_create_types(struct lp_fragment_shader_variant > *lp) > thread_data_type = LLVMStructTypeInContext(lc, elem_types, > Elements(elem_types), 0); > > -#if HAVE_LLVM < 0x0300 > - LLVMInvalidateStructLayout(gallivm->target, thread_data_type); > - > - LLVMAddTypeName(gallivm->module, "thread_data", thread_data_type); > -#endif > - > lp->jit_thread_data_ptr_type = LLVMPointerType(thread_data_type, 0); > } > >
Ahh yes killing all these ifdefs, very nice (though I'm quite sure at least 3.0 would in fact still work, but no point keeping it). 1-3 are Reviewed-by: Roland Scheidegger <srol...@vmware.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev