[Mesa-dev] [PATCH 03/12] gallivm, draw, llvmpipe: Remove support for versions of LLVM prior to 3.1.

jfonseca at vmware.com jfonseca at vmware.com
Tue May 13 05:01:09 PDT 2014


From: José Fonseca <jfonseca at 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);
    }
 
-- 
1.9.1



More information about the mesa-dev mailing list