Introduce linux-llvm target. Remove the llvm code from the default build for now.
authorZack Rusin <zack@tungstengraphics.com>
Mon, 22 Oct 2007 15:00:28 +0000 (11:00 -0400)
committerZack Rusin <zack@tungstengraphics.com>
Wed, 24 Oct 2007 15:21:04 +0000 (11:21 -0400)
Cleanup some of the debugging output.

Makefile
configs/default
configs/linux-llvm [new file with mode: 0644]
src/mesa/pipe/llvm/llvmtgsi.cpp
src/mesa/pipe/llvm/llvmtgsi.h

index a058e9839fac47741dc9d8d4124a8de1dc1b9d16..c4ffea85a2b72485be85e95a74913969c900af03 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -112,6 +112,7 @@ linux-ia64-icc \
 linux-ia64-icc-static \
 linux-icc \
 linux-icc-static \
+linux-llvm \
 linux-osmesa \
 linux-osmesa16 \
 linux-osmesa16-static \
index bb8f9a18082636914e5eef7f40d62a71cad02d40..9379833a9c0df84d2ba61b081aaaa0eb83575425 100644 (file)
@@ -40,6 +40,8 @@ GLUT_LIB = glut
 GLW_LIB = GLw
 OSMESA_LIB = OSMesa
 
+LLVM_CFLAGS=-DMESA_NO_LLVM=1
+LLVM_CXXFLAGS=-DMESA_NO_LLVM=1
 
 # Library names (actual file names)
 GL_LIB_NAME = lib$(GL_LIB).so
@@ -65,30 +67,9 @@ DRIVER_DIRS = x11 osmesa
 # Which subdirs under $(TOP)/progs/ to enter:
 PROGRAM_DIRS = demos redbook samples glsl xdemos
 
-LLVM_VERSION := $(shell llvm-config --version)
-
-ifeq ($(LLVM_VERSION),)
-  $(warning Could not find LLVM! Make Sure 'llvm-config' is in the path)
-  MESA_NO_LLVM=1
-else
-  MESA_NO_LLVM=0
-  $(info Using LLVM version: $(LLVM_VERSION))
-endif
-
-ifeq ($(MESA_NO_LLVM),0)
-#  LLVM_CFLAGS=`llvm-config --cflags` -DMESA_NO_LLVM=0
-  LLVM_CFLAGS=-DMESA_NO_LLVM=0
-  LLVM_CXXFLAGS=`llvm-config --cxxflags` -DMESA_NO_LLVM=0 -Wno-long-long
-  LLVM_LDFLAGS=`llvm-config --ldflags`
-  LLVM_LIBS=`llvm-config --libs`
-else
-  LLVM_CFLAGS=-DMESA_NO_LLVM=1
-  LLVM_CXXFLAGS=-DMESA_NO_LLVM=1
-endif
-
 # Library/program dependencies
 #EXTRA_LIB_PATH ?=
-GL_LIB_DEPS = $(LLVM_LDFLAGS) $(LLVM_LIBS) $(EXTRA_LIB_PATH) -lX11 -lXext -lm -lpthread
+GL_LIB_DEPS = $(EXTRA_LIB_PATH) -lX11 -lXext -lm -lpthread
 OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB)
 GLU_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -lm
 GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) $(EXTRA_LIB_PATH) -lX11 -lXmu -lXt -lXi -lm
diff --git a/configs/linux-llvm b/configs/linux-llvm
new file mode 100644 (file)
index 0000000..addefaa
--- /dev/null
@@ -0,0 +1,31 @@
+# Configuration for debugging on Linux
+
+include $(TOP)/configs/linux
+
+CONFIG_NAME = linux-debug
+
+OPT_FLAGS = -g -ansi -pedantic
+DEFINES += -DDEBUG -DDEBUG_MATH
+
+LLVM_VERSION := $(shell llvm-config --version)
+
+ifeq ($(LLVM_VERSION),)
+  $(warning Could not find LLVM! Make Sure 'llvm-config' is in the path)
+  MESA_NO_LLVM=1
+else
+  MESA_NO_LLVM=0
+  $(info Using LLVM version: $(LLVM_VERSION))
+endif
+
+ifeq ($(MESA_NO_LLVM),0)
+#  LLVM_CFLAGS=`llvm-config --cflags` -DMESA_NO_LLVM=0
+  LLVM_CFLAGS=-DMESA_NO_LLVM=0
+  LLVM_CXXFLAGS=`llvm-config --cxxflags` -DMESA_NO_LLVM=0 -Wno-long-long
+  LLVM_LDFLAGS=`llvm-config --ldflags`
+  LLVM_LIBS=`llvm-config --libs`
+else
+  LLVM_CFLAGS=-DMESA_NO_LLVM=1
+  LLVM_CXXFLAGS=-DMESA_NO_LLVM=1
+endif
+
+GL_LIB_DEPS = $(LLVM_LDFLAGS) $(LLVM_LIBS) $(EXTRA_LIB_PATH) -lX11 -lXext -lm -lpthread
index 00f8b86efc503579554d37c9e3308a4c792091c6..e1bb281a9454fe3f2b2569fefdf7a7c252a91da6 100644 (file)
 #include <llvm/Bitcode/ReaderWriter.h>
 
 #include <sstream>
+#include <fstream>
 #include <iostream>
 
 
+struct ga_llvm_prog {
+   void *module;
+   void *function;
+   int   num_consts;
+   int   id;
+};
+
 using namespace llvm;
 #include "llvm_base_shader.cpp"
 
@@ -134,7 +142,7 @@ translate_instruction(llvm::Module *module,
    inputs[1] = 0;
    inputs[2] = 0;
    inputs[3] = 0;
-   printf("translate instr START\n");
+
    for (int i = 0; i < inst->Instruction.NumSrcRegs; ++i) {
       struct tgsi_full_src_register *src = &inst->FullSrcRegisters[i];
       llvm::Value *val = 0;
@@ -176,7 +184,6 @@ translate_instruction(llvm::Module *module,
    /*if (inputs[0])
      instr->printVector(inputs[0]);*/
    llvm::Value *out = 0;
-   printf("Opcode is %d\n", inst->Instruction.Opcode);
    switch (inst->Instruction.Opcode) {
    case TGSI_OPCODE_ARL:
       break;
@@ -485,7 +492,6 @@ translate_instruction(llvm::Module *module,
    case TGSI_OPCODE_KIL:
       break;
    case TGSI_OPCODE_END:
-      printf("translate instr END\n");
       return;
       break;
    default:
@@ -525,7 +531,6 @@ translate_instruction(llvm::Module *module,
          fprintf(stderr, "ERROR: unsupported LLVM destination!");
       }
    }
-   printf("translate instr END\n");
 }
 
 static llvm::Module *
@@ -590,10 +595,6 @@ tgsi_to_llvm(struct ga_llvm_prog *prog, const struct tgsi_token *tokens)
    tgsi_parse_free(&parse);
 
    prog->num_consts = storage.numConsts();
-
-   std::cout<<"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"<<std::endl;
-   std::cout<<*mod<<std::endl;
-   std::cout<<"YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"<<std::endl;
    return mod;
 }
 
@@ -605,9 +606,7 @@ ga_llvm_from_tgsi(struct pipe_context *pipe, const struct tgsi_token *tokens)
    struct ga_llvm_prog *ga_llvm =
       (struct ga_llvm_prog *)malloc(sizeof(struct ga_llvm_prog));
    ga_llvm->id = GLOBAL_ID;
-   fprintf(stderr, "----- TGSI Start ---- \n");
    tgsi_dump(tokens, 0);
-   fprintf(stderr, "----- TGSI End ---- \n");
    llvm::Module *mod = tgsi_to_llvm(ga_llvm, tokens);
 
    /* Run optimization passes over it */
@@ -630,6 +629,8 @@ ga_llvm_from_tgsi(struct pipe_context *pipe, const struct tgsi_token *tokens)
    Function *func = mod->getFunction("run_vertex_shader");
    ga_llvm->function = ee->getPointerToFunctionOrStub(func);
 
+   ga_llvm_prog_dump(ga_llvm, 0);
+
    return ga_llvm;
 }
 
@@ -638,7 +639,6 @@ void ga_llvm_prog_delete(struct ga_llvm_prog *prog)
    llvm::Module *mod = static_cast<llvm::Module*>(prog->module);
    delete mod;
    prog->module = 0;
-   prog->engine = 0;
    prog->function = 0;
    free(prog);
 }
@@ -665,3 +665,31 @@ int ga_llvm_prog_exec(struct ga_llvm_prog *prog,
 
    return 0;
 }
+
+void ga_llvm_prog_dump(struct ga_llvm_prog *prog, const char *file_prefix)
+{
+   llvm::Module *mod;
+   if (!prog || !prog->module)
+      return;
+
+   mod = static_cast<llvm::Module*>(prog->module);
+
+   if (file_prefix) {
+      std::ostringstream stream;
+      stream << file_prefix;
+      stream << prog->id;
+      stream << ".ll";
+      std::string name = stream.str();
+      std::ofstream out(name.c_str());
+      if (!out) {
+         std::cerr<<"Can't open file : "<<stream.str()<<std::endl;;
+         return;
+      }
+      out << (*mod);
+      out.close();
+   } else {
+      std::cout<<"; ---------- Start shader "<<prog->id<<std::endl;
+      std::cout<<*mod<<std::endl;
+      std::cout<<"; ---------- End shader "<<prog->id<<std::endl;
+   }
+}
index 1226dc713b2f7d4db04b3017ad0632edb8a8472a..2b9540f74719f9fd429f9ebd805213c7e647719e 100644 (file)
@@ -12,13 +12,8 @@ struct tgsi_token;
 struct tgsi_sampler;
 struct pipe_context;
 
-struct ga_llvm_prog {
-   void *module;
-   void *engine;
-   void *function;
-   int   num_consts;
-   int   id;
-};
+struct ga_llvm_prog;
+
 struct ga_llvm_prog *
 ga_llvm_from_tgsi(struct pipe_context *pipe, const struct tgsi_token *tokens);
 
@@ -32,6 +27,8 @@ int ga_llvm_prog_exec(struct ga_llvm_prog *prog,
                       int num_inputs,
                       int num_attribs);
 
+void ga_llvm_prog_dump(struct ga_llvm_prog *prog, const char *file_prefix);
+
 #if defined __cplusplus
 } // extern "C"
 #endif