On 04/02/2016 08:13 AM, Jose Fonseca wrote:
Only provide a fallback for LLVM 3.3.

One less dependency on LLVM C++ interface.
---
  src/gallium/auxiliary/draw/draw_llvm.c             |  4 ++--
  src/gallium/auxiliary/gallivm/lp_bld.h             | 14 ++++++++++++
  .../auxiliary/gallivm/lp_bld_format_aos_array.c    |  2 +-
  src/gallium/auxiliary/gallivm/lp_bld_gather.c      |  2 +-
  src/gallium/auxiliary/gallivm/lp_bld_init.h        |  8 -------
  src/gallium/auxiliary/gallivm/lp_bld_misc.cpp      | 26 +++++++++++++---------
  src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c  |  2 +-
  src/gallium/auxiliary/gallivm/lp_bld_struct.c      |  4 ++--
  src/gallium/drivers/llvmpipe/lp_state_fs.c         |  4 ++--
  9 files changed, 39 insertions(+), 27 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index b48bdcc..9c68d4f 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -817,7 +817,7 @@ store_aos(struct gallivm_state *gallivm,
  #endif

     /* Unaligned store due to the vertex header */
-   lp_set_store_alignment(LLVMBuildStore(builder, value, data_ptr), 
sizeof(float));
+   LLVMSetAlignment(LLVMBuildStore(builder, value, data_ptr), sizeof(float));
  }

  /**
@@ -1069,7 +1069,7 @@ store_clip(struct gallivm_state *gallivm,
        clip_ptr = LLVMBuildPointerCast(builder, clip_ptr, clip_ptr_type, "");

        /* Unaligned store */
-      lp_set_store_alignment(LLVMBuildStore(builder, aos[j], clip_ptr), 
sizeof(float));
+      LLVMSetAlignment(LLVMBuildStore(builder, aos[j], clip_ptr), 
sizeof(float));
     }
  }

diff --git a/src/gallium/auxiliary/gallivm/lp_bld.h 
b/src/gallium/auxiliary/gallivm/lp_bld.h
index 7ba925c..041cb0d 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld.h
@@ -95,4 +95,18 @@ typedef void *LLVMMCJITMemoryManagerRef;
  #define LLVMInsertBasicBlock ILLEGAL_LLVM_FUNCTION
  #define LLVMCreateBuilder ILLEGAL_LLVM_FUNCTION

+
+/*
+ * Before LLVM 3.4 LLVMSetAlignment only supported GlobalValue, not
+ * LoadInst/StoreInst as we need.
+ */
+#if HAVE_LLVM < 0x0304
+#  ifdef __cplusplus
+extern "C"
+#  endif
+void LLVMSetAlignmentBackport(LLVMValueRef V, unsigned Bytes);
+#  define LLVMSetAlignment LLVMSetAlignmentBackport
+#endif

Minor nit- I think the above would be a little more readable with more indentation:

#if HAVE_LLVM < 0x0304
#  ifdef __cplusplus
      extern "C"
#  endif
   void LLVMSetAlignmentBackport(LLVMValueRef V, unsigned Bytes);
#  define LLVMSetAlignment LLVMSetAlignmentBackport
#endif

No bid deal though.


+
+
  #endif /* LP_BLD_H */
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_format_aos_array.c 
b/src/gallium/auxiliary/gallivm/lp_bld_format_aos_array.c
index ee3ca86..8cad3a6 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_format_aos_array.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_format_aos_array.c
@@ -74,7 +74,7 @@ lp_build_fetch_rgba_aos_array(struct gallivm_state *gallivm,
     ptr = LLVMBuildGEP(builder, base_ptr, &offset, 1, "");
     ptr = LLVMBuildPointerCast(builder, ptr, LLVMPointerType(src_vec_type, 0), 
"");
     res = LLVMBuildLoad(builder, ptr, "");
-   lp_set_load_alignment(res, src_type.width / 8);
+   LLVMSetAlignment(res, src_type.width / 8);

     /* Truncate doubles to float */
     if (src_type.floating && src_type.width == 64) {
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_gather.c 
b/src/gallium/auxiliary/gallivm/lp_bld_gather.c
index d026020..c641c8b 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_gather.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_gather.c
@@ -112,7 +112,7 @@ lp_build_gather_elem(struct gallivm_state *gallivm,
      * gallium could not do anything else except 16 no matter what...
      */
    if (!aligned) {
-      lp_set_load_alignment(res, 1);
+      LLVMSetAlignment(res, 1);
     }

     assert(src_width <= dst_width);
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.h 
b/src/gallium/auxiliary/gallivm/lp_bld_init.h
index ab44661..f0155b3 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_init.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_init.h
@@ -77,14 +77,6 @@ func_pointer
  gallivm_jit_function(struct gallivm_state *gallivm,
                       LLVMValueRef func);

-void
-lp_set_load_alignment(LLVMValueRef Inst,
-                       unsigned Align);
-
-void
-lp_set_store_alignment(LLVMValueRef Inst,
-                      unsigned Align);
-
  #ifdef __cplusplus
  }
  #endif
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp 
b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
index 30ef37c..61a50fa 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
+++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
@@ -187,22 +187,28 @@ lp_build_load_volatile(LLVMBuilderRef B, LLVMValueRef 
PointerVal,
  }


-extern "C"
-void
-lp_set_load_alignment(LLVMValueRef Inst,
-                       unsigned Align)
-{
-   llvm::unwrap<llvm::LoadInst>(Inst)->setAlignment(Align);
-}
+#if HAVE_LLVM < 0x0304

  extern "C"
  void
-lp_set_store_alignment(LLVMValueRef Inst,
-                       unsigned Align)
+LLVMSetAlignmentBackport(LLVMValueRef V,
+                         unsigned Bytes)

Could this function just be named LLVMSetAlignment() and then drop the macro?


  {
-   llvm::unwrap<llvm::StoreInst>(Inst)->setAlignment(Align);
+   switch (LLVMGetInstructionOpcode(V)) {
+   case LLVMLoad:
+      llvm::unwrap<llvm::LoadInst>(V)->setAlignment(Bytes);
+      break;
+   case LLVMStore:
+      llvm::unwrap<llvm::StoreInst>(V)->setAlignment(Bytes);
+      break;
+   default:
+      assert(0);
+      break;
+   }
  }

+#endif
+

  #if HAVE_LLVM < 0x0306
  typedef llvm::JITMemoryManager BaseMemoryManager;
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
index e21933f..937948b 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
@@ -1939,7 +1939,7 @@ lp_build_clamp_border_color(struct 
lp_build_sample_context *bld,
                                         LLVMPointerType(vec4_bld.vec_type, 0), 
"");
     border_color = LLVMBuildLoad(builder, border_color_ptr, "");
     /* we don't have aligned type in the dynamic state unfortunately */
-   lp_set_load_alignment(border_color, 4);
+   LLVMSetAlignment(border_color, 4);

     /*
      * Instead of having some incredibly complex logic which will try to 
figure out
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_struct.c 
b/src/gallium/auxiliary/gallivm/lp_bld_struct.c
index cc248d1..0df4416 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_struct.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_struct.c
@@ -157,7 +157,7 @@ lp_build_pointer_get_unaligned(LLVMBuilderRef builder,
     assert(LLVMGetTypeKind(LLVMTypeOf(ptr)) == LLVMPointerTypeKind);
     element_ptr = LLVMBuildGEP(builder, ptr, &index, 1, "");
     res = LLVMBuildLoad(builder, element_ptr, "");
-   lp_set_load_alignment(res, alignment);
+   LLVMSetAlignment(res, alignment);
  #ifdef DEBUG
     lp_build_name(res, "%s[%s]", LLVMGetValueName(ptr), 
LLVMGetValueName(index));
  #endif
@@ -188,5 +188,5 @@ lp_build_pointer_set_unaligned(LLVMBuilderRef builder,
     LLVMValueRef instr;
     element_ptr = LLVMBuildGEP(builder, ptr, &index, 1, "");
     instr = LLVMBuildStore(builder, value, element_ptr);
-   lp_set_store_alignment(instr, alignment);
+   LLVMSetAlignment(instr, alignment);
  }
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c 
b/src/gallium/drivers/llvmpipe/lp_state_fs.c
index 83ff976..ca0533b 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
@@ -786,7 +786,7 @@ load_unswizzled_block(struct gallivm_state *gallivm,

        dst[i] = LLVMBuildLoad(builder, dst_ptr, "");

-      lp_set_load_alignment(dst[i], dst_alignment);
+      LLVMSetAlignment(dst[i], dst_alignment);
     }
  }

@@ -830,7 +830,7 @@ store_unswizzled_block(struct gallivm_state *gallivm,

        src_ptr = LLVMBuildStore(builder, src[i], src_ptr);

-      lp_set_store_alignment(src_ptr, src_alignment);
+      LLVMSetAlignment(src_ptr, src_alignment);
     }
  }



In any case, for the series, Reviewed-by: Brian Paul <bri...@vmware.com>

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to