Translate is now part of an overloaded LOAD call which required a change to the code gen to skip the load functions in order to handle them manually to make them virtual. --- .../swr/rasterizer/codegen/gen_llvm_ir_macros.py | 3 ++- .../drivers/swr/rasterizer/jitter/builder_mem.cpp | 20 ++++++++++++++++++++ .../drivers/swr/rasterizer/jitter/builder_mem.h | 7 ++++++- .../drivers/swr/rasterizer/jitter/fetch_jit.cpp | 4 ---- 4 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/gallium/drivers/swr/rasterizer/codegen/gen_llvm_ir_macros.py b/src/gallium/drivers/swr/rasterizer/codegen/gen_llvm_ir_macros.py index 3b19cb4..aab499b 100644 --- a/src/gallium/drivers/swr/rasterizer/codegen/gen_llvm_ir_macros.py +++ b/src/gallium/drivers/swr/rasterizer/codegen/gen_llvm_ir_macros.py @@ -152,7 +152,8 @@ def parse_ir_builder(input_file): # The following functions need to be ignored. if (func_name == 'CreateInsertNUWNSWBinOp' or func_name == 'CreateMaskedIntrinsic' or - func_name == 'CreateAlignmentAssumptionHelper'): + func_name == 'CreateAlignmentAssumptionHelper' or + func_name == 'CreateLoad'): ignore = True # Convert CamelCase to CAMEL_CASE diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp index f7d0402..05e450f 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp +++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp @@ -69,6 +69,26 @@ namespace SwrJit return IN_BOUNDS_GEP(ptr, indices); } + LoadInst* Builder::LOAD(Value *Ptr, const char *Name) + { + return IRB()->CreateLoad(Ptr, Name); + } + + LoadInst* Builder::LOAD(Value *Ptr, const Twine &Name) + { + return IRB()->CreateLoad(Ptr, Name); + } + + LoadInst* Builder::LOAD(Type *Ty, Value *Ptr, const Twine &Name) + { + return IRB()->CreateLoad(Ty, Ptr, Name); + } + + LoadInst* Builder::LOAD(Value *Ptr, bool isVolatile, const Twine &Name) + { + return IRB()->CreateLoad(Ptr, isVolatile, Name); + } + LoadInst *Builder::LOAD(Value *basePtr, const std::initializer_list<uint32_t> &indices, const llvm::Twine& name) { std::vector<Value*> valIndices; diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h index 4f49634..b3a0e2b 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h +++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h @@ -34,7 +34,12 @@ Value *GEP(Value* ptr, const std::initializer_list<uint32_t> &indexList); Value *IN_BOUNDS_GEP(Value* ptr, const std::initializer_list<Value*> &indexList); Value *IN_BOUNDS_GEP(Value* ptr, const std::initializer_list<uint32_t> &indexList); -LoadInst *LOAD(Value *BasePtr, const std::initializer_list<uint32_t> &offset, const llvm::Twine& name = ""); +virtual LoadInst* LOAD(Value *Ptr, const char *Name); +virtual LoadInst* LOAD(Value *Ptr, const Twine &Name = ""); +virtual LoadInst* LOAD(Type *Ty, Value *Ptr, const Twine &Name = ""); +virtual LoadInst* LOAD(Value *Ptr, bool isVolatile, const Twine &Name = ""); +virtual LoadInst* LOAD(Value *BasePtr, const std::initializer_list<uint32_t> &offset, const llvm::Twine& Name = ""); + LoadInst *LOADV(Value *BasePtr, const std::initializer_list<Value*> &offset, const llvm::Twine& name = ""); StoreInst *STORE(Value *Val, Value *BasePtr, const std::initializer_list<uint32_t> &offset); StoreInst *STOREV(Value *Val, Value *BasePtr, const std::initializer_list<Value*> &offset); diff --git a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp index 68bd4c1..f1dc002 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp +++ b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp @@ -1830,16 +1830,12 @@ Value* FetchJit::GetSimdValid16bitIndices(Value* pIndices, Value* pLastIndex) Value* pZeroIndex = ALLOCA(mInt16Ty); STORE(C((uint16_t)0), pZeroIndex); - pLastIndex = TRANSLATE_ADDRESS(pLastIndex); - // Load a SIMD of index pointers for(int64_t lane = 0; lane < mVWidth; lane++) { // Calculate the address of the requested index Value *pIndex = GEP(pIndices, C(lane)); - pIndex = TRANSLATE_ADDRESS(pIndex); - // check if the address is less than the max index, Value* mask = ICMP_ULT(pIndex, pLastIndex); -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev