swr/rast: Remove code supporting legacy llvm (<3.9)
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
This commit is contained in:
@@ -48,8 +48,9 @@
|
||||
#include "llvm/Support/FormattedStream.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Config/llvm-config.h"
|
||||
|
||||
#if HAVE_LLVM < 0x400
|
||||
#if LLVM_VERSION_MAJOR < 4
|
||||
#include "llvm/Bitcode/ReaderWriter.h"
|
||||
#else
|
||||
#include "llvm/Bitcode/BitcodeWriter.h"
|
||||
@@ -231,8 +232,8 @@ void JitManager::DumpAsm(Function* pFunction, const char* fileName)
|
||||
|
||||
#if defined(_WIN32)
|
||||
DWORD pid = GetCurrentProcessId();
|
||||
TCHAR procname[MAX_PATH];
|
||||
GetModuleFileName(NULL, procname, MAX_PATH);
|
||||
char procname[MAX_PATH];
|
||||
GetModuleFileNameA(NULL, procname, MAX_PATH);
|
||||
const char* pBaseName = strrchr(procname, '\\');
|
||||
std::stringstream outDir;
|
||||
outDir << JITTER_OUTPUT_DIR << pBaseName << "_" << pid << std::ends;
|
||||
@@ -269,8 +270,8 @@ void JitManager::DumpToFile(Function *f, const char *fileName)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
DWORD pid = GetCurrentProcessId();
|
||||
TCHAR procname[MAX_PATH];
|
||||
GetModuleFileName(NULL, procname, MAX_PATH);
|
||||
char procname[MAX_PATH];
|
||||
GetModuleFileNameA(NULL, procname, MAX_PATH);
|
||||
const char* pBaseName = strrchr(procname, '\\');
|
||||
std::stringstream outDir;
|
||||
outDir << JITTER_OUTPUT_DIR << pBaseName << "_" << pid << std::ends;
|
||||
|
||||
@@ -47,13 +47,6 @@
|
||||
#include "llvm/ExecutionEngine/ObjectCache.h"
|
||||
|
||||
#include "llvm/Config/llvm-config.h"
|
||||
#ifndef LLVM_VERSION_MAJOR
|
||||
#include "llvm/Config/config.h"
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_LLVM
|
||||
#define HAVE_LLVM ((LLVM_VERSION_MAJOR << 8) | LLVM_VERSION_MINOR)
|
||||
#endif
|
||||
|
||||
#include "llvm/IR/Verifier.h"
|
||||
#include "llvm/ExecutionEngine/MCJIT.h"
|
||||
|
||||
@@ -763,22 +763,10 @@ namespace SwrJit
|
||||
/// lower 8 values are used.
|
||||
Value *Builder::PMOVSXBD(Value* a)
|
||||
{
|
||||
// llvm-3.9 removed the pmovsxbd intrinsic
|
||||
#if HAVE_LLVM < 0x309
|
||||
// use avx2 byte sign extend instruction if available
|
||||
if(JM()->mArch.AVX2())
|
||||
{
|
||||
Function *pmovsxbd = Intrinsic::getDeclaration(JM()->mpCurrentModule, Intrinsic::x86_avx2_pmovsxbd);
|
||||
return CALL(pmovsxbd, std::initializer_list<Value*>{a});
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
// VPMOVSXBD output type
|
||||
Type* v8x32Ty = VectorType::get(mInt32Ty, 8);
|
||||
// Extract 8 values from 128bit lane and sign extend
|
||||
return S_EXT(VSHUFFLE(a, a, C<int>({0, 1, 2, 3, 4, 5, 6, 7})), v8x32Ty);
|
||||
}
|
||||
// VPMOVSXBD output type
|
||||
Type* v8x32Ty = VectorType::get(mInt32Ty, 8);
|
||||
// Extract 8 values from 128bit lane and sign extend
|
||||
return S_EXT(VSHUFFLE(a, a, C<int>({0, 1, 2, 3, 4, 5, 6, 7})), v8x32Ty);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
@@ -787,22 +775,10 @@ namespace SwrJit
|
||||
/// @param a - 128bit SIMD lane(8x16bit) of 16bit integer values.
|
||||
Value *Builder::PMOVSXWD(Value* a)
|
||||
{
|
||||
// llvm-3.9 removed the pmovsxwd intrinsic
|
||||
#if HAVE_LLVM < 0x309
|
||||
// use avx2 word sign extend if available
|
||||
if(JM()->mArch.AVX2())
|
||||
{
|
||||
Function *pmovsxwd = Intrinsic::getDeclaration(JM()->mpCurrentModule, Intrinsic::x86_avx2_pmovsxwd);
|
||||
return CALL(pmovsxwd, std::initializer_list<Value*>{a});
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
// VPMOVSXWD output type
|
||||
Type* v8x32Ty = VectorType::get(mInt32Ty, 8);
|
||||
// Extract 8 values from 128bit lane and sign extend
|
||||
return S_EXT(VSHUFFLE(a, a, C<int>({0, 1, 2, 3, 4, 5, 6, 7})), v8x32Ty);
|
||||
}
|
||||
// VPMOVSXWD output type
|
||||
Type* v8x32Ty = VectorType::get(mInt32Ty, 8);
|
||||
// Extract 8 values from 128bit lane and sign extend
|
||||
return S_EXT(VSHUFFLE(a, a, C<int>({0, 1, 2, 3, 4, 5, 6, 7})), v8x32Ty);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
@@ -942,74 +918,14 @@ namespace SwrJit
|
||||
|
||||
Value *Builder::PMAXSD(Value* a, Value* b)
|
||||
{
|
||||
// llvm-3.9 removed the pmax intrinsics
|
||||
#if HAVE_LLVM >= 0x309
|
||||
Value* cmp = ICMP_SGT(a, b);
|
||||
return SELECT(cmp, a, b);
|
||||
#else
|
||||
if (JM()->mArch.AVX2())
|
||||
{
|
||||
Function* pmaxsd = Intrinsic::getDeclaration(JM()->mpCurrentModule, Intrinsic::x86_avx2_pmaxs_d);
|
||||
return CALL(pmaxsd, {a, b});
|
||||
}
|
||||
else
|
||||
{
|
||||
// use 4-wide sse max intrinsic on lower/upper halves of 8-wide sources
|
||||
Function* pmaxsd = Intrinsic::getDeclaration(JM()->mpCurrentModule, Intrinsic::x86_sse41_pmaxsd);
|
||||
|
||||
// low 128
|
||||
Value* aLo = VEXTRACTI128(a, C((uint8_t)0));
|
||||
Value* bLo = VEXTRACTI128(b, C((uint8_t)0));
|
||||
Value* resLo = CALL(pmaxsd, {aLo, bLo});
|
||||
|
||||
// high 128
|
||||
Value* aHi = VEXTRACTI128(a, C((uint8_t)1));
|
||||
Value* bHi = VEXTRACTI128(b, C((uint8_t)1));
|
||||
Value* resHi = CALL(pmaxsd, {aHi, bHi});
|
||||
|
||||
// combine
|
||||
Value* result = VINSERTI128(VUNDEF_I(), resLo, C((uint8_t)0));
|
||||
result = VINSERTI128(result, resHi, C((uint8_t)1));
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
Value *Builder::PMINSD(Value* a, Value* b)
|
||||
{
|
||||
// llvm-3.9 removed the pmin intrinsics
|
||||
#if HAVE_LLVM >= 0x309
|
||||
Value* cmp = ICMP_SLT(a, b);
|
||||
return SELECT(cmp, a, b);
|
||||
#else
|
||||
if (JM()->mArch.AVX2())
|
||||
{
|
||||
Function* pminsd = Intrinsic::getDeclaration(JM()->mpCurrentModule, Intrinsic::x86_avx2_pmins_d);
|
||||
return CALL(pminsd, {a, b});
|
||||
}
|
||||
else
|
||||
{
|
||||
// use 4-wide sse max intrinsic on lower/upper halves of 8-wide sources
|
||||
Function* pminsd = Intrinsic::getDeclaration(JM()->mpCurrentModule, Intrinsic::x86_sse41_pminsd);
|
||||
|
||||
// low 128
|
||||
Value* aLo = VEXTRACTI128(a, C((uint8_t)0));
|
||||
Value* bLo = VEXTRACTI128(b, C((uint8_t)0));
|
||||
Value* resLo = CALL(pminsd, {aLo, bLo});
|
||||
|
||||
// high 128
|
||||
Value* aHi = VEXTRACTI128(a, C((uint8_t)1));
|
||||
Value* bHi = VEXTRACTI128(b, C((uint8_t)1));
|
||||
Value* resHi = CALL(pminsd, {aHi, bHi});
|
||||
|
||||
// combine
|
||||
Value* result = VINSERTI128(VUNDEF_I(), resLo, C((uint8_t)0));
|
||||
result = VINSERTI128(result, resHi, C((uint8_t)1));
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Builder::Gather4(const SWR_FORMAT format, Value* pSrcBase, Value* byteOffsets,
|
||||
@@ -1595,7 +1511,7 @@ namespace SwrJit
|
||||
#if defined( _WIN32 )
|
||||
char strBuf[1024];
|
||||
vsnprintf_s(strBuf, _TRUNCATE, fmt, args);
|
||||
OutputDebugString(strBuf);
|
||||
OutputDebugStringA(strBuf);
|
||||
#endif
|
||||
|
||||
va_end(args);
|
||||
|
||||
Reference in New Issue
Block a user