mirror of
https://abf.rosa.ru/djam/mesa.git
synced 2025-02-24 15:12:56 +00:00
328 lines
12 KiB
Diff
328 lines
12 KiB
Diff
--- a/src/gallium/auxiliary/gallivm/lp_bld_type.c
|
|
+++ b/src/gallium/auxiliary/gallivm/lp_bld_type.c
|
|
@@ -325,8 +325,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:
|
|
--- a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp 2011-10-15 08:43:58.000000000 +0800
|
|
+++ b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp 2011-12-05 17:19:25.000000000 +0800
|
|
@@ -25,19 +25,27 @@
|
|
*
|
|
**************************************************************************/
|
|
|
|
+#include <stddef.h>
|
|
+
|
|
#include <llvm-c/Core.h>
|
|
#include <llvm/Target/TargetMachine.h>
|
|
-#include <llvm/Target/TargetRegistry.h>
|
|
-#include <llvm/Target/TargetSelect.h>
|
|
#include <llvm/Target/TargetInstrInfo.h>
|
|
#include <llvm/Support/raw_ostream.h>
|
|
#include <llvm/Support/MemoryObject.h>
|
|
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+#include <llvm/Support/TargetRegistry.h>
|
|
+#include <llvm/Support/TargetSelect.h>
|
|
+#else /* HAVE_LLVM < 0x0300 */
|
|
+#include <llvm/Target/TargetRegistry.h>
|
|
+#include <llvm/Target/TargetSelect.h>
|
|
+#endif /* HAVE_LLVM < 0x0300 */
|
|
+
|
|
#if HAVE_LLVM >= 0x0209
|
|
#include <llvm/Support/Host.h>
|
|
-#else
|
|
+#else /* HAVE_LLVM < 0x0209 */
|
|
#include <llvm/System/Host.h>
|
|
-#endif
|
|
+#endif /* HAVE_LLVM < 0x0209 */
|
|
|
|
#if HAVE_LLVM >= 0x0207
|
|
#include <llvm/MC/MCDisassembler.h>
|
|
@@ -180,7 +188,11 @@
|
|
* 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);
|
|
@@ -193,14 +205,23 @@
|
|
|
|
InitializeAllDisassemblers();
|
|
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ OwningPtr<const MCAsmInfo> AsmInfo(T->createMCAsmInfo(Triple));
|
|
+#else
|
|
OwningPtr<const MCAsmInfo> AsmInfo(T->createAsmInfo(Triple));
|
|
+#endif
|
|
|
|
if (!AsmInfo) {
|
|
debug_printf("error: no assembly info for target %s\n", Triple.c_str());
|
|
return;
|
|
}
|
|
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ 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) {
|
|
debug_printf("error: no disassembler for target %s\n", Triple.c_str());
|
|
return;
|
|
@@ -213,7 +234,11 @@
|
|
#else
|
|
int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
|
|
#endif
|
|
-#if HAVE_LLVM >= 0x0208
|
|
+
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ OwningPtr<MCInstPrinter> Printer(
|
|
+ T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo, *STI));
|
|
+#elif HAVE_LLVM >= 0x0208
|
|
OwningPtr<MCInstPrinter> Printer(
|
|
T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo));
|
|
#else
|
|
@@ -253,7 +278,11 @@
|
|
|
|
if (!DisAsm->getInstruction(Inst, Size, memoryObject,
|
|
pc,
|
|
- nulls())) {
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ nulls(), nulls())) {
|
|
+#else
|
|
+ nulls())) {
|
|
+#endif
|
|
debug_printf("invalid\n");
|
|
pc += 1;
|
|
}
|
|
@@ -276,7 +305,9 @@
|
|
* Print the instruction.
|
|
*/
|
|
|
|
-#if HAVE_LLVM >= 0x208
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ Printer->printInst(&Inst, Out, "");
|
|
+#elif HAVE_LLVM >= 0x208
|
|
Printer->printInst(&Inst, Out);
|
|
#else
|
|
Printer->printInst(&Inst);
|
|
@@ -289,7 +320,11 @@
|
|
|
|
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.
|
|
--- a/src/gallium/auxiliary/draw/draw_llvm.c
|
|
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
|
|
@@ -96,7 +96,7 @@ draw_llvm_generate_elts(struct draw_llvm *llvm, struct draw_llvm_variant *var);
|
|
* Create LLVM type for struct draw_jit_texture
|
|
*/
|
|
static LLVMTypeRef
|
|
-create_jit_texture_type(struct gallivm_state *gallivm)
|
|
+create_jit_texture_type(struct gallivm_state *gallivm, const char *struct_name)
|
|
{
|
|
LLVMTargetDataRef target = gallivm->target;
|
|
LLVMTypeRef texture_type;
|
|
@@ -120,13 +120,21 @@ create_jit_texture_type(struct gallivm_state *gallivm)
|
|
elem_types[DRAW_JIT_TEXTURE_BORDER_COLOR] =
|
|
LLVMArrayType(LLVMFloatTypeInContext(gallivm->context), 4);
|
|
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ texture_type = LLVMStructCreateNamed(gallivm->context, struct_name);
|
|
+ LLVMStructSetBody(texture_type, elem_types,
|
|
+ Elements(elem_types), 0);
|
|
+#else
|
|
texture_type = LLVMStructTypeInContext(gallivm->context, elem_types,
|
|
Elements(elem_types), 0);
|
|
|
|
+ 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,
|
|
@@ -176,7 +184,7 @@ create_jit_texture_type(struct gallivm_state *gallivm)
|
|
*/
|
|
static LLVMTypeRef
|
|
create_jit_context_type(struct gallivm_state *gallivm,
|
|
- LLVMTypeRef texture_type)
|
|
+ LLVMTypeRef texture_type, const char *struct_name)
|
|
{
|
|
LLVMTargetDataRef target = gallivm->target;
|
|
LLVMTypeRef float_type = LLVMFloatTypeInContext(gallivm->context);
|
|
@@ -189,11 +197,17 @@ create_jit_context_type(struct gallivm_state *gallivm,
|
|
elem_types[3] = LLVMPointerType(float_type, 0); /* viewport */
|
|
elem_types[4] = LLVMArrayType(texture_type,
|
|
PIPE_MAX_VERTEX_SAMPLERS); /* textures */
|
|
-
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ context_type = LLVMStructCreateNamed(gallivm->context, struct_name);
|
|
+ LLVMStructSetBody(context_type, elem_types,
|
|
+ Elements(elem_types), 0);
|
|
+#else
|
|
context_type = LLVMStructTypeInContext(gallivm->context, elem_types,
|
|
Elements(elem_types), 0);
|
|
+ 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, 0);
|
|
@@ -215,7 +229,7 @@ create_jit_context_type(struct gallivm_state *gallivm,
|
|
* Create LLVM type for struct pipe_vertex_buffer
|
|
*/
|
|
static LLVMTypeRef
|
|
-create_jit_vertex_buffer_type(struct gallivm_state *gallivm)
|
|
+create_jit_vertex_buffer_type(struct gallivm_state *gallivm, const char *struct_name)
|
|
{
|
|
LLVMTargetDataRef target = gallivm->target;
|
|
LLVMTypeRef elem_types[3];
|
|
@@ -225,10 +239,17 @@ create_jit_vertex_buffer_type(struct gallivm_state *gallivm)
|
|
elem_types[1] = LLVMInt32TypeInContext(gallivm->context);
|
|
elem_types[2] = LLVMPointerType(LLVMInt8TypeInContext(gallivm->context), 0); /* vs_constants */
|
|
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ vb_type = LLVMStructCreateNamed(gallivm->context, struct_name);
|
|
+ LLVMStructSetBody(vb_type, elem_types,
|
|
+ Elements(elem_types), 0);
|
|
+#else
|
|
vb_type = LLVMStructTypeInContext(gallivm->context, elem_types,
|
|
Elements(elem_types), 0);
|
|
+ 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);
|
|
@@ -258,10 +279,17 @@ create_jit_vertex_header(struct gallivm_state *gallivm, int data_elems)
|
|
elem_types[1] = LLVMArrayType(LLVMFloatTypeInContext(gallivm->context), 4);
|
|
elem_types[2] = LLVMArrayType(elem_types[1], data_elems);
|
|
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ vertex_header = LLVMStructCreateNamed(gallivm->context, struct_name);
|
|
+ LLVMStructSetBody(vertex_header, elem_types,
|
|
+ Elements(elem_types), 0);
|
|
+#else
|
|
vertex_header = LLVMStructTypeInContext(gallivm->context, elem_types,
|
|
Elements(elem_types), 0);
|
|
+ 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,
|
|
@@ -284,8 +312,6 @@ create_jit_vertex_header(struct gallivm_state *gallivm, int data_elems)
|
|
target, vertex_header,
|
|
DRAW_JIT_VERTEX_DATA);
|
|
|
|
- LLVMAddTypeName(gallivm->module, struct_name, vertex_header);
|
|
-
|
|
return vertex_header;
|
|
}
|
|
|
|
@@ -299,19 +325,15 @@ create_jit_types(struct draw_llvm *llvm)
|
|
struct gallivm_state *gallivm = llvm->gallivm;
|
|
LLVMTypeRef texture_type, context_type, buffer_type, vb_type;
|
|
|
|
- texture_type = create_jit_texture_type(gallivm);
|
|
- LLVMAddTypeName(gallivm->module, "texture", texture_type);
|
|
+ texture_type = create_jit_texture_type(gallivm, "texture");
|
|
|
|
- context_type = create_jit_context_type(gallivm, texture_type);
|
|
- LLVMAddTypeName(gallivm->module, "draw_jit_context", context_type);
|
|
+ context_type = create_jit_context_type(gallivm, texture_type, "draw_jit_context");
|
|
llvm->context_ptr_type = LLVMPointerType(context_type, 0);
|
|
|
|
buffer_type = LLVMPointerType(LLVMIntTypeInContext(gallivm->context, 8), 0);
|
|
- LLVMAddTypeName(gallivm->module, "buffer", buffer_type);
|
|
llvm->buffer_ptr_type = LLVMPointerType(buffer_type, 0);
|
|
|
|
- vb_type = create_jit_vertex_buffer_type(gallivm);
|
|
- LLVMAddTypeName(gallivm->module, "pipe_vertex_buffer", vb_type);
|
|
+ vb_type = create_jit_vertex_buffer_type(gallivm, "pipe_vertex_buffer");
|
|
llvm->vb_ptr_type = LLVMPointerType(vb_type, 0);
|
|
}
|
|
|
|
--- a/src/gallium/drivers/llvmpipe/lp_jit.c
|
|
+++ b/src/gallium/drivers/llvmpipe/lp_jit.c
|
|
@@ -68,10 +68,17 @@ lp_jit_create_types(struct llvmpipe_context *lp)
|
|
elem_types[LP_JIT_TEXTURE_BORDER_COLOR] =
|
|
LLVMArrayType(LLVMFloatTypeInContext(lc), 4);
|
|
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ texture_type = LLVMStructCreateNamed(gallivm->context, "texture");
|
|
+ LLVMStructSetBody(texture_type, elem_types,
|
|
+ Elements(elem_types), 0);
|
|
+#else
|
|
texture_type = LLVMStructTypeInContext(lc, elem_types,
|
|
Elements(elem_types), 0);
|
|
+ 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,
|
|
@@ -112,8 +119,6 @@ lp_jit_create_types(struct llvmpipe_context *lp)
|
|
|
|
LP_CHECK_STRUCT_SIZE(struct lp_jit_texture,
|
|
gallivm->target, texture_type);
|
|
-
|
|
- LLVMAddTypeName(gallivm->module, "texture", texture_type);
|
|
}
|
|
|
|
/* struct lp_jit_context */
|
|
@@ -129,11 +134,19 @@ lp_jit_create_types(struct llvmpipe_context *lp)
|
|
elem_types[LP_JIT_CTX_TEXTURES] = LLVMArrayType(texture_type,
|
|
PIPE_MAX_SAMPLERS);
|
|
|
|
+#if HAVE_LLVM >= 0x0300
|
|
+ context_type = LLVMStructCreateNamed(gallivm->context, "context");
|
|
+ LLVMStructSetBody(context_type, elem_types,
|
|
+ Elements(elem_types), 0);
|
|
+#else
|
|
context_type = LLVMStructTypeInContext(lc, elem_types,
|
|
Elements(elem_types), 0);
|
|
|
|
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);
|
|
@@ -155,8 +168,6 @@ lp_jit_create_types(struct llvmpipe_context *lp)
|
|
LP_CHECK_STRUCT_SIZE(struct lp_jit_context,
|
|
gallivm->target, context_type);
|
|
|
|
- LLVMAddTypeName(gallivm->module, "context", context_type);
|
|
-
|
|
lp->jit_context_ptr_type = LLVMPointerType(context_type, 0);
|
|
}
|
|
|