mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-01 18:39:03 +08:00
335 lines
18 KiB
Diff
335 lines
18 KiB
Diff
|
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp b/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp
|
||
|
index 44482939c7649a2bcc39f3b2eb75720de90bcef0..1124e3773b99430c8da5ccb061d92b1b3a1bf1a6 100644
|
||
|
--- a/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp
|
||
|
+++ b/src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp
|
||
|
@@ -56,6 +56,14 @@
|
||
|
using namespace llvm;
|
||
|
using namespace SwrJit;
|
||
|
|
||
|
+#if LLVM_VERSION_MAJOR >= 7
|
||
|
+static constexpr llvm::sys::fs::OpenFlags OF_NONE = llvm::sys::fs::OF_None;
|
||
|
+static constexpr llvm::sys::fs::OpenFlags OF_TEXT = llvm::sys::fs::OF_Text;
|
||
|
+#else
|
||
|
+static constexpr llvm::sys::fs::OpenFlags OF_NONE = llvm::sys::fs::F_None;
|
||
|
+static constexpr llvm::sys::fs::OpenFlags OF_TEXT = llvm::sys::fs::F_Text;
|
||
|
+#endif
|
||
|
+
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Contructor for JitManager.
|
||
|
/// @param simdWidth - SIMD width to be used in generated program.
|
||
|
@@ -437,7 +445,7 @@ void JitManager::DumpAsm(Function* pFunction, const char* fileName)
|
||
|
sprintf(fName, "%s.%s.asm", funcName, fileName);
|
||
|
#endif
|
||
|
|
||
|
- raw_fd_ostream filestream(fName, EC, llvm::sys::fs::F_None);
|
||
|
+ raw_fd_ostream filestream(fName, EC, OF_NONE);
|
||
|
|
||
|
legacy::PassManager* pMPasses = new legacy::PassManager();
|
||
|
auto* pTarget = mpExec->getTargetMachine();
|
||
|
@@ -490,7 +498,7 @@ void JitManager::DumpToFile(Module* M,
|
||
|
#else
|
||
|
sprintf(fName, "%s.%s.ll", funcName, fileName);
|
||
|
#endif
|
||
|
- raw_fd_ostream fd(fName, EC, llvm::sys::fs::F_None);
|
||
|
+ raw_fd_ostream fd(fName, EC, OF_NONE);
|
||
|
M->print(fd, annotater);
|
||
|
fd.flush();
|
||
|
}
|
||
|
@@ -512,7 +520,7 @@ void JitManager::DumpToFile(Function* f, const char* fileName)
|
||
|
#else
|
||
|
sprintf(fName, "%s.%s.ll", funcName, fileName);
|
||
|
#endif
|
||
|
- raw_fd_ostream fd(fName, EC, llvm::sys::fs::F_None);
|
||
|
+ raw_fd_ostream fd(fName, EC, OF_NONE);
|
||
|
f->print(fd, nullptr);
|
||
|
|
||
|
#if defined(_WIN32)
|
||
|
@@ -522,7 +530,7 @@ void JitManager::DumpToFile(Function* f, const char* fileName)
|
||
|
#endif
|
||
|
fd.flush();
|
||
|
|
||
|
- raw_fd_ostream fd_cfg(fName, EC, llvm::sys::fs::F_Text);
|
||
|
+ raw_fd_ostream fd_cfg(fName, EC, OF_TEXT);
|
||
|
WriteGraph(fd_cfg, (const Function*)f);
|
||
|
|
||
|
fd_cfg.flush();
|
||
|
@@ -726,7 +734,7 @@ void JitCache::notifyObjectCompiled(const llvm::Module* M, llvm::MemoryBufferRef
|
||
|
|
||
|
{
|
||
|
std::error_code err;
|
||
|
- llvm::raw_fd_ostream fileObj(objPath.c_str(), err, llvm::sys::fs::F_None);
|
||
|
+ llvm::raw_fd_ostream fileObj(objPath.c_str(), err, OF_NONE);
|
||
|
fileObj << Obj.getBuffer();
|
||
|
fileObj.flush();
|
||
|
}
|
||
|
@@ -734,7 +742,7 @@ void JitCache::notifyObjectCompiled(const llvm::Module* M, llvm::MemoryBufferRef
|
||
|
|
||
|
{
|
||
|
std::error_code err;
|
||
|
- llvm::raw_fd_ostream fileObj(filePath.c_str(), err, llvm::sys::fs::F_None);
|
||
|
+ llvm::raw_fd_ostream fileObj(filePath.c_str(), err, OF_NONE);
|
||
|
|
||
|
uint32_t objcrc = ComputeCRC(0, Obj.getBufferStart(), Obj.getBufferSize());
|
||
|
|
||
|
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_gfx_mem.h b/src/gallium/drivers/swr/rasterizer/jitter/builder_gfx_mem.h
|
||
|
index c361959b76ff0799f5102ad4b8ddf23d345105d9..64a690b47fac9ee99eba8f1259ffccf20f0e5fa0 100644
|
||
|
--- a/src/gallium/drivers/swr/rasterizer/jitter/builder_gfx_mem.h
|
||
|
+++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_gfx_mem.h
|
||
|
@@ -41,31 +41,29 @@ namespace SwrJit
|
||
|
BuilderGfxMem(JitManager* pJitMgr);
|
||
|
virtual ~BuilderGfxMem() {}
|
||
|
|
||
|
- virtual Value* GEP(Value* Ptr, Value* Idx, Type* Ty = nullptr, bool isReadOnly = true, const Twine& Name = "");
|
||
|
- virtual Value* GEP(Type* Ty, Value* Ptr, Value* Idx, const Twine& Name = "");
|
||
|
- virtual Value*
|
||
|
- GEP(Value* Ptr, const std::initializer_list<Value*>& indexList, Type* Ty = nullptr);
|
||
|
- virtual Value*
|
||
|
- GEP(Value* Ptr, const std::initializer_list<uint32_t>& indexList, Type* Ty = nullptr);
|
||
|
+ virtual Value* GEP(Value* Ptr, Value* Idx, Type* Ty = nullptr, bool isReadOnly = true, const Twine& Name = "") override;
|
||
|
+ virtual Value* GEP(Type* Ty, Value* Ptr, Value* Idx, const Twine& Name = "") override;
|
||
|
+ virtual Value* GEP(Value* Ptr, const std::initializer_list<Value*>& indexList, Type* Ty = nullptr) override;
|
||
|
+ virtual Value* GEP(Value* Ptr, const std::initializer_list<uint32_t>& indexList, Type* Ty = nullptr) override;
|
||
|
|
||
|
virtual LoadInst* LOAD(Value* Ptr,
|
||
|
const char* Name,
|
||
|
Type* Ty = nullptr,
|
||
|
- MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
virtual LoadInst* LOAD(Value* Ptr,
|
||
|
const Twine& Name = "",
|
||
|
Type* Ty = nullptr,
|
||
|
- MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
virtual LoadInst* LOAD(Value* Ptr,
|
||
|
bool isVolatile,
|
||
|
const Twine& Name = "",
|
||
|
Type* Ty = nullptr,
|
||
|
- MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
virtual LoadInst* LOAD(Value* BasePtr,
|
||
|
const std::initializer_list<uint32_t>& offset,
|
||
|
const llvm::Twine& Name = "",
|
||
|
Type* Ty = nullptr,
|
||
|
- MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
|
||
|
virtual CallInst* MASKED_LOAD(Value* Ptr,
|
||
|
unsigned Align,
|
||
|
@@ -73,32 +71,32 @@ namespace SwrJit
|
||
|
Value* PassThru = nullptr,
|
||
|
const Twine& Name = "",
|
||
|
Type* Ty = nullptr,
|
||
|
- MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
|
||
|
- virtual StoreInst* STORE(Value *Val, Value *Ptr, bool isVolatile = false, Type* Ty = nullptr, MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
-
|
||
|
- virtual StoreInst* STORE(Value* Val, Value* BasePtr, const std::initializer_list<uint32_t>& offset, Type* Ty = nullptr, MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ virtual StoreInst* STORE(Value *Val, Value *Ptr, bool isVolatile = false, Type* Ty = nullptr, MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
|
||
|
- virtual CallInst* MASKED_STORE(Value *Val, Value *Ptr, unsigned Align, Value *Mask, Type* Ty = nullptr, MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ virtual StoreInst* STORE(Value* Val, Value* BasePtr, const std::initializer_list<uint32_t>& offset, Type* Ty = nullptr, MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
+
|
||
|
+ virtual CallInst* MASKED_STORE(Value *Val, Value *Ptr, unsigned Align, Value *Mask, Type* Ty = nullptr, MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
|
||
|
virtual Value* GATHERPS(Value* src,
|
||
|
Value* pBase,
|
||
|
Value* indices,
|
||
|
Value* mask,
|
||
|
uint8_t scale = 1,
|
||
|
- MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
virtual Value* GATHERDD(Value* src,
|
||
|
Value* pBase,
|
||
|
Value* indices,
|
||
|
Value* mask,
|
||
|
uint8_t scale = 1,
|
||
|
- MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
|
||
|
virtual void SCATTERPS(Value* pDst,
|
||
|
Value* vSrc,
|
||
|
Value* vOffsets,
|
||
|
Value* vMask,
|
||
|
- MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
+ MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL) override;
|
||
|
|
||
|
Value* TranslateGfxAddressForRead(Value* xpGfxAddress,
|
||
|
Type* PtrTy = nullptr,
|
||
|
@@ -108,13 +106,13 @@ namespace SwrJit
|
||
|
Type* PtrTy = nullptr,
|
||
|
const Twine& Name = "",
|
||
|
MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
-
|
||
|
+
|
||
|
protected:
|
||
|
void AssertGFXMemoryParams(Value* ptr, MEM_CLIENT usage);
|
||
|
|
||
|
virtual void NotifyPrivateContextSet();
|
||
|
|
||
|
- virtual Value* OFFSET_TO_NEXT_COMPONENT(Value* base, Constant* offset);
|
||
|
+ virtual Value* OFFSET_TO_NEXT_COMPONENT(Value* base, Constant* offset) override;
|
||
|
|
||
|
Value* TranslationHelper(Value* Ptr, Type* Ty, Value* pfnTranslateGfxAddress);
|
||
|
void TrackerHelper(Value* Ptr, Type* Ty, MEM_CLIENT usage, bool isRead);
|
||
|
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
|
||
|
index b5eb0a782b15214bcf954a7893cd628649a990fc..a16b5d11dbb2f2f1a0bcdc07e4d306b14a90dc4c 100644
|
||
|
--- a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
|
||
|
+++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
|
||
|
@@ -82,7 +82,12 @@ namespace SwrJit
|
||
|
std::vector<Value*> indices;
|
||
|
for (auto i : indexList)
|
||
|
indices.push_back(i);
|
||
|
+#if LLVM_VERSION_MAJOR >= 13
|
||
|
+ Type *EltTy = cast<PointerType>(ptr->getType())->getElementType();
|
||
|
+ return IN_BOUNDS_GEP(EltTy, ptr, indices);
|
||
|
+#else
|
||
|
return IN_BOUNDS_GEP(ptr, indices);
|
||
|
+#endif
|
||
|
}
|
||
|
|
||
|
Value* Builder::IN_BOUNDS_GEP(Value* ptr, const std::initializer_list<uint32_t>& indexList)
|
||
|
@@ -90,7 +95,12 @@ namespace SwrJit
|
||
|
std::vector<Value*> indices;
|
||
|
for (auto i : indexList)
|
||
|
indices.push_back(C(i));
|
||
|
+#if LLVM_VERSION_MAJOR >= 13
|
||
|
+ Type *EltTy = cast<PointerType>(ptr->getType())->getElementType();
|
||
|
+ return IN_BOUNDS_GEP(EltTy, ptr, indices);
|
||
|
+#else
|
||
|
return IN_BOUNDS_GEP(ptr, indices);
|
||
|
+#endif
|
||
|
}
|
||
|
|
||
|
LoadInst* Builder::LOAD(Value* Ptr, const char* Name, Type* Ty, MEM_CLIENT usage)
|
||
|
@@ -130,6 +140,22 @@ namespace SwrJit
|
||
|
return Builder::LOAD(GEPA(basePtr, valIndices), name);
|
||
|
}
|
||
|
|
||
|
+ CallInst* Builder::MASKED_LOAD(Value* Ptr,
|
||
|
+ unsigned Align,
|
||
|
+ Value* Mask,
|
||
|
+ Value* PassThru,
|
||
|
+ const Twine& Name,
|
||
|
+ Type* Ty,
|
||
|
+ MEM_CLIENT usage)
|
||
|
+ {
|
||
|
+#if LLVM_VERSION_MAJOR >= 13
|
||
|
+ Type *EltTy = cast<PointerType>(Ptr->getType())->getElementType();
|
||
|
+ return IRB()->CreateMaskedLoad(EltTy, Ptr, AlignType(Align), Mask, PassThru, Name);
|
||
|
+#else
|
||
|
+ return IRB()->CreateMaskedLoad(Ptr, AlignType(Align), Mask, PassThru, Name);
|
||
|
+#endif
|
||
|
+ }
|
||
|
+
|
||
|
LoadInst* Builder::LOADV(Value* basePtr,
|
||
|
const std::initializer_list<Value*>& indices,
|
||
|
const llvm::Twine& name)
|
||
|
@@ -234,7 +260,12 @@ namespace SwrJit
|
||
|
/// @param pVecPassthru - SIMD wide vector of values to load when lane is inactive
|
||
|
Value* Builder::GATHER_PTR(Value* pVecSrcPtr, Value* pVecMask, Value* pVecPassthru)
|
||
|
{
|
||
|
+#if LLVM_VERSION_MAJOR >= 13
|
||
|
+ Type *EltTy = cast<PointerType>(pVecSrcPtr->getType())->getElementType();
|
||
|
+ return MASKED_GATHER(EltTy, pVecSrcPtr, AlignType(4), pVecMask, pVecPassthru);
|
||
|
+#else
|
||
|
return MASKED_GATHER(pVecSrcPtr, AlignType(4), pVecMask, pVecPassthru);
|
||
|
+#endif
|
||
|
}
|
||
|
|
||
|
void Builder::SCATTER_PTR(Value* pVecDstPtr, Value* pVecSrc, Value* pVecMask)
|
||
|
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h
|
||
|
index 429d5779a4db2a6a3b6c7a7d02169773c935bb95..6682ad892b4038d4b3172b932a34e31a89cd7790 100644
|
||
|
--- a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h
|
||
|
+++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.h
|
||
|
@@ -82,10 +82,7 @@ virtual CallInst* MASKED_LOAD(Value* Ptr,
|
||
|
Value* PassThru = nullptr,
|
||
|
const Twine& Name = "",
|
||
|
Type* Ty = nullptr,
|
||
|
- MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL)
|
||
|
-{
|
||
|
- return IRB()->CreateMaskedLoad(Ptr, AlignType(Align), Mask, PassThru, Name);
|
||
|
-}
|
||
|
+ MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL);
|
||
|
|
||
|
virtual StoreInst* STORE(Value *Val, Value *Ptr, bool isVolatile = false, Type* Ty = nullptr, MEM_CLIENT usage = MEM_CLIENT::MEM_CLIENT_INTERNAL)
|
||
|
{
|
||
|
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp
|
||
|
index bd5f7588c9189275ddaf3075b0a75e2e8fc1ecf5..2a4cf74722bc9ef1831d25fe6c2bb2f510b8fceb 100644
|
||
|
--- a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp
|
||
|
+++ b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp
|
||
|
@@ -276,7 +276,8 @@ Function* FetchJit::Create(const FETCH_COMPILE_STATE& fetchState)
|
||
|
JitManager::DumpToFile(fetch, "src");
|
||
|
|
||
|
#if defined(_DEBUG)
|
||
|
- verifyFunction(*fetch);
|
||
|
+ // Note that false is returned if there are no errors
|
||
|
+ SWR_ASSERT(!verifyFunction(*fetch, &llvm::errs()));
|
||
|
#endif
|
||
|
|
||
|
::FunctionPassManager setupPasses(JM()->mpCurrentModule);
|
||
|
diff --git a/src/gallium/drivers/swr/swr_shader.cpp b/src/gallium/drivers/swr/swr_shader.cpp
|
||
|
index 315036920fb3ad364d0039349e148c70e5ba1818..a643b46cd081c026b5a3558d22be557338d4f220 100644
|
||
|
--- a/src/gallium/drivers/swr/swr_shader.cpp
|
||
|
+++ b/src/gallium/drivers/swr/swr_shader.cpp
|
||
|
@@ -1557,8 +1557,10 @@ BuilderSWR::CompileGS(struct swr_context *ctx, swr_jit_gs_key &key)
|
||
|
AttributeSet attrSet = AttributeSet::get(
|
||
|
JM()->mContext, AttributeSet::FunctionIndex, attrBuilder);
|
||
|
pFunction->addAttributes(AttributeSet::FunctionIndex, attrSet);
|
||
|
-#else
|
||
|
+#elif LLVM_VERSION_MAJOR < 14
|
||
|
pFunction->addAttributes(AttributeList::FunctionIndex, attrBuilder);
|
||
|
+#else
|
||
|
+ pFunction->addFnAttrs(attrBuilder);
|
||
|
#endif
|
||
|
|
||
|
BasicBlock *block = BasicBlock::Create(JM()->mContext, "entry", pFunction);
|
||
|
@@ -1785,8 +1787,10 @@ BuilderSWR::CompileTES(struct swr_context *ctx, swr_jit_tes_key &key)
|
||
|
AttributeSet attrSet = AttributeSet::get(
|
||
|
JM()->mContext, AttributeSet::FunctionIndex, attrBuilder);
|
||
|
pFunction->addAttributes(AttributeSet::FunctionIndex, attrSet);
|
||
|
-#else
|
||
|
+#elif LLVM_VERSION_MAJOR < 14
|
||
|
pFunction->addAttributes(AttributeList::FunctionIndex, attrBuilder);
|
||
|
+#else
|
||
|
+ pFunction->addFnAttrs(attrBuilder);
|
||
|
#endif
|
||
|
|
||
|
BasicBlock *block = BasicBlock::Create(JM()->mContext, "entry", pFunction);
|
||
|
@@ -2086,8 +2090,10 @@ BuilderSWR::CompileTCS(struct swr_context *ctx, swr_jit_tcs_key &key)
|
||
|
AttributeSet attrSet = AttributeSet::get(
|
||
|
JM()->mContext, AttributeSet::FunctionIndex, attrBuilder);
|
||
|
pFunction->addAttributes(AttributeSet::FunctionIndex, attrSet);
|
||
|
-#else
|
||
|
+#elif LLVM_VERSION_MAJOR < 14
|
||
|
pFunction->addAttributes(AttributeList::FunctionIndex, attrBuilder);
|
||
|
+#else
|
||
|
+ pFunction->addFnAttrs(attrBuilder);
|
||
|
#endif
|
||
|
|
||
|
BasicBlock *block = BasicBlock::Create(JM()->mContext, "entry", pFunction);
|
||
|
@@ -2341,8 +2347,10 @@ BuilderSWR::CompileVS(struct swr_context *ctx, swr_jit_vs_key &key)
|
||
|
AttributeSet attrSet = AttributeSet::get(
|
||
|
JM()->mContext, AttributeSet::FunctionIndex, attrBuilder);
|
||
|
pFunction->addAttributes(AttributeSet::FunctionIndex, attrSet);
|
||
|
-#else
|
||
|
+#elif LLVM_VERSION_MAJOR < 14
|
||
|
pFunction->addAttributes(AttributeList::FunctionIndex, attrBuilder);
|
||
|
+#else
|
||
|
+ pFunction->addFnAttrs(attrBuilder);
|
||
|
#endif
|
||
|
|
||
|
BasicBlock *block = BasicBlock::Create(JM()->mContext, "entry", pFunction);
|
||
|
@@ -2646,8 +2654,10 @@ BuilderSWR::CompileFS(struct swr_context *ctx, swr_jit_fs_key &key)
|
||
|
AttributeSet attrSet = AttributeSet::get(
|
||
|
JM()->mContext, AttributeSet::FunctionIndex, attrBuilder);
|
||
|
pFunction->addAttributes(AttributeSet::FunctionIndex, attrSet);
|
||
|
-#else
|
||
|
+#elif LLVM_VERSION_MAJOR < 14
|
||
|
pFunction->addAttributes(AttributeList::FunctionIndex, attrBuilder);
|
||
|
+#else
|
||
|
+ pFunction->addFnAttrs(attrBuilder);
|
||
|
#endif
|
||
|
|
||
|
BasicBlock *block = BasicBlock::Create(JM()->mContext, "entry", pFunction);
|