Mesa (master): gallium/swr: Fix compilation with LLVM 12

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Sep 2 09:39:03 UTC 2020


Module: Mesa
Branch: master
Commit: 639605e5ba947bb947313a6584ef7fbb8619e9c2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=639605e5ba947bb947313a6584ef7fbb8619e9c2

Author: jzielins <jan.zielinski at intel.com>
Date:   Tue Sep  1 16:53:12 2020 +0200

gallium/swr: Fix compilation with LLVM 12

Update to reflect changes in VectorType and ElementCount APIs

Closes: #3457
Reviewed-by: Krzysztof Raszkowski <krzysztof.raszkowski at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6554>

---

 .../swr/rasterizer/codegen/gen_llvm_ir_macros.py   |  2 +-
 .../swr/rasterizer/codegen/gen_llvm_types.py       | 26 ++++++-------
 .../drivers/swr/rasterizer/jitter/blend_jit.cpp    |  2 +
 .../drivers/swr/rasterizer/jitter/builder.cpp      | 30 +++++++--------
 .../drivers/swr/rasterizer/jitter/builder_mem.cpp  | 12 +++---
 .../drivers/swr/rasterizer/jitter/builder_misc.cpp | 44 +++++++++++-----------
 .../drivers/swr/rasterizer/jitter/fetch_jit.cpp    | 34 +++++++++--------
 .../rasterizer/jitter/functionpasses/lower_x86.cpp | 16 ++++----
 .../drivers/swr/rasterizer/jitter/jit_pch.hpp      | 12 ++++++
 .../swr/rasterizer/jitter/streamout_jit.cpp        |  4 +-
 src/gallium/drivers/swr/swr_shader.cpp             | 15 +++-----
 11 files changed, 106 insertions(+), 91 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 b0002d888fb..0b4f82c04f8 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
@@ -52,7 +52,7 @@ intrinsics = [
     ['VPSHUFB',     ['a', 'b'], 'a'],
     ['VPERMD',      ['a', 'idx'], 'a'],
     ['VPERMPS',     ['idx', 'a'], 'a'],
-    ['VCVTPD2PS',   ['a'], 'VectorType::get(mFP32Ty, VEC_GET_NUM_ELEMS)'],
+    ['VCVTPD2PS',   ['a'], 'getVectorType(mFP32Ty, VEC_GET_NUM_ELEMS)'],
     ['VCVTPS2PH',   ['a', 'round'], 'mSimdInt16Ty'],
     ['VHSUBPS',     ['a', 'b'], 'a'],
     ['VPTESTC',     ['a', 'b'], 'mInt32Ty'],
diff --git a/src/gallium/drivers/swr/rasterizer/codegen/gen_llvm_types.py b/src/gallium/drivers/swr/rasterizer/codegen/gen_llvm_types.py
index c26f093c474..7089a3d0f2b 100644
--- a/src/gallium/drivers/swr/rasterizer/codegen/gen_llvm_types.py
+++ b/src/gallium/drivers/swr/rasterizer/codegen/gen_llvm_types.py
@@ -57,31 +57,31 @@ def gen_llvm_type(type, name, idx, is_pointer, is_pointer_pointer, is_array, is_
         elif type == 'HANDLE':
             llvm_type = 'PointerType::get(Type::getInt32Ty(ctx), 0)'
         elif type == 'simdscalar':
-            llvm_type = 'VectorType::get(Type::getFloatTy(ctx), pJitMgr->mVWidth)'
+            llvm_type = 'getVectorType(Type::getFloatTy(ctx), pJitMgr->mVWidth)'
         elif type == 'simdscalari':
-            llvm_type = 'VectorType::get(Type::getInt32Ty(ctx), pJitMgr->mVWidth)'
+            llvm_type = 'getVectorType(Type::getInt32Ty(ctx), pJitMgr->mVWidth)'
         elif type == 'simd16scalar':
-            llvm_type = 'VectorType::get(Type::getFloatTy(ctx), 16)'
+            llvm_type = 'getVectorType(Type::getFloatTy(ctx), 16)'
         elif type == 'simd16scalari':
-            llvm_type = 'VectorType::get(Type::getInt32Ty(ctx), 16)'
+            llvm_type = 'getVectorType(Type::getInt32Ty(ctx), 16)'
         elif type == '__m128i':
-            llvm_type = 'VectorType::get(Type::getInt32Ty(ctx), 4)'
+            llvm_type = 'getVectorType(Type::getInt32Ty(ctx), 4)'
         elif type == 'SIMD256::Float':
-            llvm_type = 'VectorType::get(Type::getFloatTy(ctx), 8)'
+            llvm_type = 'getVectorType(Type::getFloatTy(ctx), 8)'
         elif type == 'SIMD256::Integer':
-            llvm_type = 'VectorType::get(Type::getInt32Ty(ctx), 8)'
+            llvm_type = 'getVectorType(Type::getInt32Ty(ctx), 8)'
         elif type == 'SIMD512::Float':
-            llvm_type = 'VectorType::get(Type::getFloatTy(ctx), 16)'
+            llvm_type = 'getVectorType(Type::getFloatTy(ctx), 16)'
         elif type == 'SIMD512::Integer':
-            llvm_type = 'VectorType::get(Type::getInt32Ty(ctx), 16)'
+            llvm_type = 'getVectorType(Type::getInt32Ty(ctx), 16)'
         elif type == 'simdvector':
-            llvm_type = 'ArrayType::get(VectorType::get(Type::getFloatTy(ctx), 8), 4)'
+            llvm_type = 'ArrayType::get(getVectorType(Type::getFloatTy(ctx), 8), 4)'
         elif type == 'simd16vector':
-            llvm_type = 'ArrayType::get(VectorType::get(Type::getFloatTy(ctx), 16), 4)'
+            llvm_type = 'ArrayType::get(getVectorType(Type::getFloatTy(ctx), 16), 4)'
         elif type == 'SIMD256::Vec4':
-            llvm_type = 'ArrayType::get(VectorType::get(Type::getFloatTy(ctx), 8), 4)'
+            llvm_type = 'ArrayType::get(getVectorType(Type::getFloatTy(ctx), 8), 4)'
         elif type == 'SIMD512::Vec4':
-            llvm_type = 'ArrayType::get(VectorType::get(Type::getFloatTy(ctx), 16), 4)'
+            llvm_type = 'ArrayType::get(getVectorType(Type::getFloatTy(ctx), 16), 4)'
         else:
             llvm_type = 'Gen_%s(pJitMgr)' % type
 
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp b/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp
index d5328c8e4e6..3568bba82f7 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp
@@ -870,7 +870,9 @@ struct BlendJit : public Builder
         passes.add(createCFGSimplificationPass());
         passes.add(createEarlyCSEPass());
         passes.add(createInstructionCombiningPass());
+#if LLVM_VERSION_MAJOR <= 11
         passes.add(createConstantPropagationPass());
+#endif
         passes.add(createSCCPPass());
         passes.add(createAggressiveDCEPass());
 
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder.cpp b/src/gallium/drivers/swr/rasterizer/jitter/builder.cpp
index e7ba0040d9d..cd4b5f31ea3 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/builder.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/builder.cpp
@@ -63,23 +63,23 @@ namespace SwrJit
         mInt64PtrTy = PointerType::get(mInt64Ty, 0);
         mHandleTy   = mInt8PtrTy;
 
-        mSimd4FP64Ty = VectorType::get(mDoubleTy, 4);
+        mSimd4FP64Ty = getVectorType(mDoubleTy, 4);
 
         // Built in types: target simd
         SetTargetWidth(pJitMgr->mVWidth);
 
         // Built in types: simd16
 
-        mSimd16Int1Ty     = VectorType::get(mInt1Ty, mVWidth16);
-        mSimd16Int16Ty    = VectorType::get(mInt16Ty, mVWidth16);
-        mSimd16Int32Ty    = VectorType::get(mInt32Ty, mVWidth16);
-        mSimd16Int64Ty    = VectorType::get(mInt64Ty, mVWidth16);
-        mSimd16FP16Ty     = VectorType::get(mFP16Ty, mVWidth16);
-        mSimd16FP32Ty     = VectorType::get(mFP32Ty, mVWidth16);
+        mSimd16Int1Ty     = getVectorType(mInt1Ty, mVWidth16);
+        mSimd16Int16Ty    = getVectorType(mInt16Ty, mVWidth16);
+        mSimd16Int32Ty    = getVectorType(mInt32Ty, mVWidth16);
+        mSimd16Int64Ty    = getVectorType(mInt64Ty, mVWidth16);
+        mSimd16FP16Ty     = getVectorType(mFP16Ty, mVWidth16);
+        mSimd16FP32Ty     = getVectorType(mFP32Ty, mVWidth16);
         mSimd16VectorTy   = ArrayType::get(mSimd16FP32Ty, 4);
         mSimd16VectorTRTy = ArrayType::get(mSimd16FP32Ty, 5);
 
-        mSimd32Int8Ty = VectorType::get(mInt8Ty, 32);
+        mSimd32Int8Ty = getVectorType(mInt8Ty, 32);
 
         if (sizeof(uint32_t*) == 4)
         {
@@ -101,12 +101,12 @@ namespace SwrJit
     {
         mVWidth = width;
 
-        mSimdInt1Ty      = VectorType::get(mInt1Ty, mVWidth);
-        mSimdInt16Ty     = VectorType::get(mInt16Ty, mVWidth);
-        mSimdInt32Ty     = VectorType::get(mInt32Ty, mVWidth);
-        mSimdInt64Ty     = VectorType::get(mInt64Ty, mVWidth);
-        mSimdFP16Ty      = VectorType::get(mFP16Ty, mVWidth);
-        mSimdFP32Ty      = VectorType::get(mFP32Ty, mVWidth);
+        mSimdInt1Ty      = getVectorType(mInt1Ty, mVWidth);
+        mSimdInt16Ty     = getVectorType(mInt16Ty, mVWidth);
+        mSimdInt32Ty     = getVectorType(mInt32Ty, mVWidth);
+        mSimdInt64Ty     = getVectorType(mInt64Ty, mVWidth);
+        mSimdFP16Ty      = getVectorType(mFP16Ty, mVWidth);
+        mSimdFP32Ty      = getVectorType(mFP32Ty, mVWidth);
         mSimdVectorTy    = ArrayType::get(mSimdFP32Ty, 4);
         mSimdVectorIntTy = ArrayType::get(mSimdInt32Ty, 4);
         mSimdVectorTRTy  = ArrayType::get(mSimdFP32Ty, 5);
@@ -213,7 +213,7 @@ namespace SwrJit
         }
 
         // <ty> should packetize to <8 x <ty>>
-        Type* vecType = VectorType::get(pType, JM()->mVWidth);
+        Type* vecType = getVectorType(pType, JM()->mVWidth);
         return vecType;
     }
 } // namespace SwrJit
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
index 065d7fa0afd..b5eb0a782b1 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
@@ -427,8 +427,8 @@ namespace SwrJit
                                       bool                   bPackedOutput)
     {
         // cast types
-        Type* vGatherTy = VectorType::get(IntegerType::getInt32Ty(JM()->mContext), mVWidth);
-        Type* v32x8Ty   = VectorType::get(mInt8Ty, mVWidth * 4); // vwidth is units of 32 bits
+        Type* vGatherTy = getVectorType(IntegerType::getInt32Ty(JM()->mContext), mVWidth);
+        Type* v32x8Ty   = getVectorType(mInt8Ty, mVWidth * 4); // vwidth is units of 32 bits
 
         // input could either be float or int vector; do shuffle work in int
         vGatherInput[0] = BITCAST(vGatherInput[0], mSimdInt32Ty);
@@ -436,7 +436,7 @@ namespace SwrJit
 
         if (bPackedOutput)
         {
-            Type* v128bitTy = VectorType::get(IntegerType::getIntNTy(JM()->mContext, 128),
+            Type* v128bitTy = getVectorType(IntegerType::getIntNTy(JM()->mContext, 128),
                                               mVWidth / 4); // vwidth is units of 32 bits
 
             // shuffle mask
@@ -532,12 +532,12 @@ namespace SwrJit
                                      bool                   bPackedOutput)
     {
         // cast types
-        Type* vGatherTy = VectorType::get(IntegerType::getInt32Ty(JM()->mContext), mVWidth);
-        Type* v32x8Ty   = VectorType::get(mInt8Ty, mVWidth * 4); // vwidth is units of 32 bits
+        Type* vGatherTy = getVectorType(IntegerType::getInt32Ty(JM()->mContext), mVWidth);
+        Type* v32x8Ty   = getVectorType(mInt8Ty, mVWidth * 4); // vwidth is units of 32 bits
 
         if (bPackedOutput)
         {
-            Type* v128Ty = VectorType::get(IntegerType::getIntNTy(JM()->mContext, 128),
+            Type* v128Ty = getVectorType(IntegerType::getIntNTy(JM()->mContext, 128),
                                            mVWidth / 4); // vwidth is units of 32 bits
                                                          // shuffle mask
             Value* vConstMask = C<char>({0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15,
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_misc.cpp b/src/gallium/drivers/swr/rasterizer/jitter/builder_misc.cpp
index 0ee727cc8d8..530752850c6 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/builder_misc.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_misc.cpp
@@ -134,7 +134,7 @@ namespace SwrJit
     Value* Builder::VIMMED1(uint64_t i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth, false), cast<ConstantInt>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth, false), cast<ConstantInt>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth, cast<ConstantInt>(C(i)));
 #endif
@@ -143,7 +143,7 @@ namespace SwrJit
     Value* Builder::VIMMED1_16(uint64_t i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth16, false), cast<ConstantInt>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth16, false), cast<ConstantInt>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth16, cast<ConstantInt>(C(i)));
 #endif
@@ -152,7 +152,7 @@ namespace SwrJit
     Value* Builder::VIMMED1(int i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth, false), cast<ConstantInt>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth, false), cast<ConstantInt>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth, cast<ConstantInt>(C(i)));
 #endif
@@ -161,7 +161,7 @@ namespace SwrJit
     Value* Builder::VIMMED1_16(int i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth16, false), cast<ConstantInt>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth16, false), cast<ConstantInt>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth16, cast<ConstantInt>(C(i)));
 #endif
@@ -170,7 +170,7 @@ namespace SwrJit
     Value* Builder::VIMMED1(uint32_t i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth, false), cast<ConstantInt>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth, false), cast<ConstantInt>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth, cast<ConstantInt>(C(i)));
 #endif
@@ -179,7 +179,7 @@ namespace SwrJit
     Value* Builder::VIMMED1_16(uint32_t i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth16, false), cast<ConstantInt>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth16, false), cast<ConstantInt>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth16, cast<ConstantInt>(C(i)));
 #endif
@@ -188,7 +188,7 @@ namespace SwrJit
     Value* Builder::VIMMED1(float i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth, false), cast<ConstantFP>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth, false), cast<ConstantFP>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth, cast<ConstantFP>(C(i)));
 #endif
@@ -197,7 +197,7 @@ namespace SwrJit
     Value* Builder::VIMMED1_16(float i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth16, false), cast<ConstantFP>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth16, false), cast<ConstantFP>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth16, cast<ConstantFP>(C(i)));
 #endif
@@ -206,7 +206,7 @@ namespace SwrJit
     Value* Builder::VIMMED1(bool i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth, false), cast<ConstantInt>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth, false), cast<ConstantInt>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth, cast<ConstantInt>(C(i)));
 #endif
@@ -215,27 +215,27 @@ namespace SwrJit
     Value* Builder::VIMMED1_16(bool i)
     {
 #if LLVM_VERSION_MAJOR > 10
-        return ConstantVector::getSplat(ElementCount(mVWidth16, false), cast<ConstantInt>(C(i)));
+        return ConstantVector::getSplat(ElementCount::get(mVWidth16, false), cast<ConstantInt>(C(i)));
 #else
         return ConstantVector::getSplat(mVWidth16, cast<ConstantInt>(C(i)));
 #endif
     }
 
-    Value* Builder::VUNDEF_IPTR() { return UndefValue::get(VectorType::get(mInt32PtrTy, mVWidth)); }
+    Value* Builder::VUNDEF_IPTR() { return UndefValue::get(getVectorType(mInt32PtrTy, mVWidth)); }
 
-    Value* Builder::VUNDEF(Type* t) { return UndefValue::get(VectorType::get(t, mVWidth)); }
+    Value* Builder::VUNDEF(Type* t) { return UndefValue::get(getVectorType(t, mVWidth)); }
 
-    Value* Builder::VUNDEF_I() { return UndefValue::get(VectorType::get(mInt32Ty, mVWidth)); }
+    Value* Builder::VUNDEF_I() { return UndefValue::get(getVectorType(mInt32Ty, mVWidth)); }
 
-    Value* Builder::VUNDEF_I_16() { return UndefValue::get(VectorType::get(mInt32Ty, mVWidth16)); }
+    Value* Builder::VUNDEF_I_16() { return UndefValue::get(getVectorType(mInt32Ty, mVWidth16)); }
 
-    Value* Builder::VUNDEF_F() { return UndefValue::get(VectorType::get(mFP32Ty, mVWidth)); }
+    Value* Builder::VUNDEF_F() { return UndefValue::get(getVectorType(mFP32Ty, mVWidth)); }
 
-    Value* Builder::VUNDEF_F_16() { return UndefValue::get(VectorType::get(mFP32Ty, mVWidth16)); }
+    Value* Builder::VUNDEF_F_16() { return UndefValue::get(getVectorType(mFP32Ty, mVWidth16)); }
 
     Value* Builder::VUNDEF(Type* ty, uint32_t size)
     {
-        return UndefValue::get(VectorType::get(ty, size));
+        return UndefValue::get(getVectorType(ty, size));
     }
 
     Value* Builder::VBROADCAST(Value* src, const llvm::Twine& name)
@@ -602,7 +602,7 @@ namespace SwrJit
             // number of 8 bit elements in b
             uint32_t numElms = cast<VectorType>(cB->getType())->getNumElements();
             // output vector
-            Value* vShuf = UndefValue::get(VectorType::get(mInt8Ty, numElms));
+            Value* vShuf = UndefValue::get(getVectorType(mInt8Ty, numElms));
 
             // insert an 8 bit value from the high and low lanes of a per loop iteration
             numElms /= 2;
@@ -643,7 +643,7 @@ namespace SwrJit
     Value* Builder::PMOVSXBD(Value* a)
     {
         // VPMOVSXBD output type
-        Type* v8x32Ty = VectorType::get(mInt32Ty, 8);
+        Type* v8x32Ty = getVectorType(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);
     }
@@ -655,7 +655,7 @@ namespace SwrJit
     Value* Builder::PMOVSXWD(Value* a)
     {
         // VPMOVSXWD output type
-        Type* v8x32Ty = VectorType::get(mInt32Ty, 8);
+        Type* v8x32Ty = getVectorType(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);
     }
@@ -672,9 +672,9 @@ namespace SwrJit
 #else
         uint32_t numElems = a->getType()->getVectorNumElements();
 #endif
-        Value*   input    = BITCAST(a, VectorType::get(mFP16Ty, numElems));
+        Value*   input    = BITCAST(a, getVectorType(mFP16Ty, numElems));
 
-        return FP_EXT(input, VectorType::get(mFP32Ty, numElems), name);
+        return FP_EXT(input, getVectorType(mFP32Ty, numElems), name);
     }
 
     //////////////////////////////////////////////////////////////////////////
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp
index a2d253183fe..0e57c18d629 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp
@@ -178,7 +178,7 @@ Function* FetchJit::Create(const FETCH_COMPILE_STATE& fetchState)
         if (fetchState.bDisableIndexOOBCheck)
         {
             vIndices = LOAD(
-                BITCAST(indices, PointerType::get(VectorType::get(mInt8Ty, mpJitMgr->mVWidth), 0)),
+                BITCAST(indices, PointerType::get(getVectorType(mInt8Ty, mpJitMgr->mVWidth), 0)),
                 {(uint32_t)0});
             vIndices = Z_EXT(vIndices, mSimdInt32Ty);
         }
@@ -191,7 +191,7 @@ Function* FetchJit::Create(const FETCH_COMPILE_STATE& fetchState)
         if (fetchState.bDisableIndexOOBCheck)
         {
             vIndices = LOAD(
-                BITCAST(indices, PointerType::get(VectorType::get(mInt16Ty, mpJitMgr->mVWidth), 0)),
+                BITCAST(indices, PointerType::get(getVectorType(mInt16Ty, mpJitMgr->mVWidth), 0)),
                 {(uint32_t)0});
             vIndices = Z_EXT(vIndices, mSimdInt32Ty);
         }
@@ -297,7 +297,9 @@ Function* FetchJit::Create(const FETCH_COMPILE_STATE& fetchState)
     optPasses.add(createCFGSimplificationPass());
     optPasses.add(createEarlyCSEPass());
     optPasses.add(createInstructionCombiningPass());
+#if LLVM_VERSION_MAJOR <= 11
     optPasses.add(createConstantPropagationPass());
+#endif
     optPasses.add(createSCCPPass());
     optPasses.add(createAggressiveDCEPass());
 
@@ -1310,14 +1312,14 @@ void FetchJit::Shuffle8bpcGatherd16(Shuffle8bpcArgs& args)
     const uint32_t(&swizzle)[4]                     = std::get<9>(args);
 
     // cast types
-    Type* vGatherTy = VectorType::get(mInt32Ty, 8);
-    Type* v32x8Ty   = VectorType::get(mInt8Ty, 32);
+    Type* vGatherTy = getVectorType(mInt32Ty, 8);
+    Type* v32x8Ty   = getVectorType(mInt8Ty, 32);
 
     // have to do extra work for sign extending
     if ((extendType == Instruction::CastOps::SExt) || (extendType == Instruction::CastOps::SIToFP))
     {
-        Type* v16x8Ty = VectorType::get(mInt8Ty, 16); // 8x16bit ints in a 128bit lane
-        Type* v128Ty  = VectorType::get(IntegerType::getIntNTy(JM()->mContext, 128), 2);
+        Type* v16x8Ty = getVectorType(mInt8Ty, 16); // 8x16bit ints in a 128bit lane
+        Type* v128Ty  = getVectorType(IntegerType::getIntNTy(JM()->mContext, 128), 2);
 
         // shuffle mask, including any swizzling
         const char x          = (char)swizzle[0];
@@ -1573,7 +1575,7 @@ void FetchJit::Shuffle8bpcGatherd(Shuffle8bpcArgs& args)
     const uint32_t(&swizzle)[4]                     = std::get<9>(args);
 
     // cast types
-    Type* v32x8Ty = VectorType::get(mInt8Ty, mVWidth * 4); // vwidth is units of 32 bits
+    Type* v32x8Ty = getVectorType(mInt8Ty, mVWidth * 4); // vwidth is units of 32 bits
 
     for (uint32_t i = 0; i < 4; i++)
     {
@@ -1687,8 +1689,8 @@ void FetchJit::Shuffle16bpcGather16(Shuffle16bpcArgs& args)
     Value*(&vVertexElements)[4]                     = std::get<8>(args);
 
     // cast types
-    Type* vGatherTy = VectorType::get(mInt32Ty, 8);
-    Type* v32x8Ty   = VectorType::get(mInt8Ty, 32);
+    Type* vGatherTy = getVectorType(mInt32Ty, 8);
+    Type* v32x8Ty   = getVectorType(mInt8Ty, 32);
 
     // have to do extra work for sign extending
     if ((extendType == Instruction::CastOps::SExt) ||
@@ -1697,8 +1699,8 @@ void FetchJit::Shuffle16bpcGather16(Shuffle16bpcArgs& args)
         // is this PP float?
         bool bFP = (extendType == Instruction::CastOps::FPExt) ? true : false;
 
-        Type* v8x16Ty   = VectorType::get(mInt16Ty, 8); // 8x16bit in a 128bit lane
-        Type* v128bitTy = VectorType::get(IntegerType::getIntNTy(JM()->mContext, 128), 2);
+        Type* v8x16Ty   = getVectorType(mInt16Ty, 8); // 8x16bit in a 128bit lane
+        Type* v128bitTy = getVectorType(IntegerType::getIntNTy(JM()->mContext, 128), 2);
 
         // shuffle mask
         Value* vConstMask = C<uint8_t>({0, 1, 4, 5, 8, 9, 12, 13, 2, 3, 6, 7, 10, 11, 14, 15,
@@ -1956,8 +1958,8 @@ void FetchJit::Shuffle16bpcGather(Shuffle16bpcArgs& args)
     Value*(&vVertexElements)[4]                     = std::get<8>(args);
 
     // cast types
-    Type* vGatherTy = VectorType::get(IntegerType::getInt32Ty(JM()->mContext), mVWidth);
-    Type* v32x8Ty   = VectorType::get(mInt8Ty, mVWidth * 4); // vwidth is units of 32 bits
+    Type* vGatherTy = getVectorType(IntegerType::getInt32Ty(JM()->mContext), mVWidth);
+    Type* v32x8Ty   = getVectorType(mInt8Ty, mVWidth * 4); // vwidth is units of 32 bits
 
     // have to do extra work for sign extending
     if ((extendType == Instruction::CastOps::SExt) ||
@@ -1966,8 +1968,8 @@ void FetchJit::Shuffle16bpcGather(Shuffle16bpcArgs& args)
         // is this PP float?
         bool bFP = (extendType == Instruction::CastOps::FPExt) ? true : false;
 
-        Type* v8x16Ty   = VectorType::get(mInt16Ty, 8); // 8x16bit in a 128bit lane
-        Type* v128bitTy = VectorType::get(IntegerType::getIntNTy(JM()->mContext, 128),
+        Type* v8x16Ty   = getVectorType(mInt16Ty, 8); // 8x16bit in a 128bit lane
+        Type* v128bitTy = getVectorType(IntegerType::getIntNTy(JM()->mContext, 128),
                                           mVWidth / 4); // vwidth is units of 32 bits
 
         // shuffle mask
@@ -2223,7 +2225,7 @@ Value* FetchJit::GenerateCompCtrlVector(const ComponentControl ctrl)
     {
         if (mVWidth == 16)
         {
-            Type*  pSimd8FPTy = VectorType::get(mFP32Ty, 8);
+            Type*  pSimd8FPTy = getVectorType(mFP32Ty, 8);
             Value* pIdLo =
                 BITCAST(LOAD(GEP(mpFetchInfo, {0, SWR_FETCH_CONTEXT_VertexID})), pSimd8FPTy);
             Value* pIdHi =
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/functionpasses/lower_x86.cpp b/src/gallium/drivers/swr/rasterizer/jitter/functionpasses/lower_x86.cpp
index c583c25f3bb..c3d192fd73e 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/functionpasses/lower_x86.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/functionpasses/lower_x86.cpp
@@ -287,7 +287,7 @@ namespace SwrJit
                 SWR_ASSERT(false, "Unhandled vector width type %d\n", width);
             }
 
-            return ConstantVector::getNullValue(VectorType::get(pTy, numElem));
+            return ConstantVector::getNullValue(getVectorType(pTy, numElem));
         }
 
         Value* GetMask(TargetWidth width)
@@ -315,7 +315,7 @@ namespace SwrJit
 #else
             uint32_t numElem = vi1Mask->getType()->getVectorNumElements();
 #endif
-            return B->S_EXT(vi1Mask, VectorType::get(B->mInt32Ty, numElem));
+            return B->S_EXT(vi1Mask, getVectorType(B->mInt32Ty, numElem));
         }
 
         Instruction* ProcessIntrinsicAdvanced(CallInst* pCallInst)
@@ -546,7 +546,7 @@ namespace SwrJit
 
             v32Gather        = UndefValue::get(vSrc->getType());
 #if LLVM_VERSION_MAJOR > 10
-            auto vi32Scale   = ConstantVector::getSplat(ElementCount(numElem, false), cast<ConstantInt>(i32Scale));
+            auto vi32Scale   = ConstantVector::getSplat(ElementCount::get(numElem, false), cast<ConstantInt>(i32Scale));
 #else
             auto vi32Scale   = ConstantVector::getSplat(numElem, cast<ConstantInt>(i32Scale));
 #endif
@@ -609,7 +609,7 @@ namespace SwrJit
 #else
                     uint32_t numElem = v64Mask->getType()->getVectorNumElements();
 #endif
-                    v64Mask = B->S_EXT(v64Mask, VectorType::get(B->mInt64Ty, numElem));
+                    v64Mask = B->S_EXT(v64Mask, getVectorType(B->mInt64Ty, numElem));
                     v64Mask = B->BITCAST(v64Mask, vSrc->getType());
 
                     Value* src0 = B->VSHUFFLE(vSrc, vSrc, B->C({0, 1, 2, 3}));
@@ -632,12 +632,12 @@ namespace SwrJit
                     uint32_t numElemSrc1  = src1->getType()->getVectorNumElements();
                     uint32_t numElemMask1 = mask1->getType()->getVectorNumElements();
 #endif
-                    src0 = B->BITCAST(src0, VectorType::get(B->mInt64Ty, numElemSrc0));
-                    mask0 = B->BITCAST(mask0, VectorType::get(B->mInt64Ty, numElemMask0));
+                    src0 = B->BITCAST(src0, getVectorType(B->mInt64Ty, numElemSrc0));
+                    mask0 = B->BITCAST(mask0, getVectorType(B->mInt64Ty, numElemMask0));
                     Value* gather0 =
                         B->CALL(pX86IntrinFunc, {src0, pBase, indices0, mask0, i8Scale});
-                    src1 = B->BITCAST(src1, VectorType::get(B->mInt64Ty, numElemSrc1));
-                    mask1 = B->BITCAST(mask1, VectorType::get(B->mInt64Ty, numElemMask1));
+                    src1 = B->BITCAST(src1, getVectorType(B->mInt64Ty, numElemSrc1));
+                    mask1 = B->BITCAST(mask1, getVectorType(B->mInt64Ty, numElemMask1));
                     Value* gather1 =
                         B->CALL(pX86IntrinFunc, {src1, pBase, indices1, mask1, i8Scale});
                     v32Gather = B->VSHUFFLE(gather0, gather1, B->C({0, 1, 2, 3, 4, 5, 6, 7}));
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/jit_pch.hpp b/src/gallium/drivers/swr/rasterizer/jitter/jit_pch.hpp
index 1bdba9d9acd..a5c5b1f73c9 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/jit_pch.hpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/jit_pch.hpp
@@ -138,6 +138,18 @@ static inline llvm::AttributeSet GetFuncAttribSet(llvm::LLVMContext&       ctx,
 }
 #endif
 
+#if LLVM_VERSION_MAJOR >= 12
+static inline llvm::VectorType* getVectorType(llvm::Type *ElementType, unsigned NumElements)
+{
+    return llvm::VectorType::get(ElementType, NumElements, false);
+}
+#else
+static inline llvm::VectorType* getVectorType(llvm::Type *ElementType, unsigned NumElements)
+{
+    return llvm::VectorType::get(ElementType, NumElements);
+}
+#endif
+
 #if LLVM_VERSION_MAJOR < 7
 #pragma pop_macro("DEBUG")
 #endif
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/streamout_jit.cpp b/src/gallium/drivers/swr/rasterizer/jitter/streamout_jit.cpp
index 13e70a7f90a..60259f093a1 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/streamout_jit.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/streamout_jit.cpp
@@ -138,7 +138,7 @@ struct StreamOutJit : public BuilderGfxMem
             Value* pAttrib = GEP(pStream, C(4 * decl.attribSlot));
 
             // load 4 components from stream
-            Type* simd4Ty    = VectorType::get(IRB()->getFloatTy(), 4);
+            Type* simd4Ty    = getVectorType(IRB()->getFloatTy(), 4);
             Type* simd4PtrTy = PointerType::get(simd4Ty, 0);
             pAttrib          = BITCAST(pAttrib, simd4PtrTy);
             Value* vattrib   = LOAD(pAttrib);
@@ -314,7 +314,9 @@ struct StreamOutJit : public BuilderGfxMem
         passes.add(createCFGSimplificationPass());
         passes.add(createEarlyCSEPass());
         passes.add(createInstructionCombiningPass());
+#if LLVM_VERSION_MAJOR <= 11
         passes.add(createConstantPropagationPass());
+#endif
         passes.add(createSCCPPass());
         passes.add(createAggressiveDCEPass());
 
diff --git a/src/gallium/drivers/swr/swr_shader.cpp b/src/gallium/drivers/swr/swr_shader.cpp
index cd1a136d0c9..15347aaf945 100644
--- a/src/gallium/drivers/swr/swr_shader.cpp
+++ b/src/gallium/drivers/swr/swr_shader.cpp
@@ -551,7 +551,6 @@ swr_tcs_llvm_fetch_input(const struct lp_build_tcs_iface *tcs_iface,
                          LLVMValueRef vertex_index,
                          boolean is_aindex_indirect,
                          LLVMValueRef attrib_index,
-                         boolean is_sindex_indirect,
                          LLVMValueRef swizzle_index)
 {
     swr_tcs_llvm_iface *iface = (swr_tcs_llvm_iface*)tcs_iface;
@@ -572,7 +571,6 @@ swr_tcs_llvm_fetch_output(const struct lp_build_tcs_iface *tcs_iface,
                           LLVMValueRef vertex_index,
                           boolean is_aindex_indirect,
                           LLVMValueRef attrib_index,
-                          boolean is_sindex_indirect,
                           LLVMValueRef swizzle_index,
                           uint32_t name)
 {
@@ -651,7 +649,6 @@ swr_tes_llvm_fetch_vtx_input(const struct lp_build_tes_iface *tes_iface,
                              LLVMValueRef vertex_index,
                              boolean is_aindex_indirect,
                              LLVMValueRef attrib_index,
-                             boolean is_sindex_indirect,
                              LLVMValueRef swizzle_index)
 {
     swr_tes_llvm_iface *iface = (swr_tes_llvm_iface*)tes_iface;
@@ -760,7 +757,7 @@ BuilderSWR::swr_gs_llvm_emit_vertex(const struct lp_build_gs_iface *gs_base,
     Value *pVertexOffset = MUL(unwrap(emitted_vertices_vec), VIMMED1(vertSize));
 
     Value *vMask = LOAD(iface->pGsCtx, {0, SWR_GS_CONTEXT_mask});
-    Value *vMask1 = TRUNC(vMask, VectorType::get(mInt1Ty, mVWidth));
+    Value *vMask1 = TRUNC(vMask, getVectorType(mInt1Ty, mVWidth));
 
     Value *pStack = STACKSAVE();
     Value *pTmpPtr = ALLOCA(mFP32Ty, C(4)); // used for dummy write for lane masking
@@ -883,7 +880,7 @@ BuilderSWR::swr_gs_llvm_end_primitive(const struct lp_build_gs_iface *gs_base,
     IRB()->SetInsertPoint(unwrap(LLVMGetInsertBlock(gallivm->builder)));
 
     Value *vMask = LOAD(iface->pGsCtx, { 0, SWR_GS_CONTEXT_mask });
-    Value *vMask1 = TRUNC(vMask, VectorType::get(mInt1Ty, 8));
+    Value *vMask1 = TRUNC(vMask, getVectorType(mInt1Ty, 8));
 
     uint32_t vertsPerPrim = iface->num_verts_per_prim;
 
@@ -896,13 +893,13 @@ BuilderSWR::swr_gs_llvm_end_primitive(const struct lp_build_gs_iface *gs_base,
     Value *mask = unwrap(mask_vec);
     Value *cmpMask = VMASK(ICMP_NE(unwrap(verts_per_prim_vec), VIMMED1(0)));
     mask = AND(mask, cmpMask);
-    vMask1 = TRUNC(mask, VectorType::get(mInt1Ty, 8));
+    vMask1 = TRUNC(mask, getVectorType(mInt1Ty, 8));
 
     vCount = SUB(vCount, VIMMED1(1));
     Value *vOffset = ADD(UDIV(vCount, VIMMED1(8)), VIMMED1(VERTEX_COUNT_SIZE));
     Value *vValue = SHL(VIMMED1(1), UREM(vCount, VIMMED1(8)));
 
-    vValue = TRUNC(vValue, VectorType::get(mInt8Ty, 8));
+    vValue = TRUNC(vValue, getVectorType(mInt8Ty, 8));
 
     Value *pStack = STACKSAVE();
     Value *pTmpPtr = ALLOCA(mInt8Ty, C(4)); // used for dummy read/write for lane masking
@@ -1839,7 +1836,7 @@ BuilderSWR::CompileTES(struct swr_context *ctx, swr_jit_tes_key &key)
    Value* pTessFactors = GEP(pPatch, {C(0), C(ScalarPatch_tessFactors)});
 
    assert(SWR_NUM_OUTER_TESS_FACTORS == 4);
-   Value* sys_value_outer_factors = UndefValue::get(VectorType::get(mFP32Ty, 4));
+   Value* sys_value_outer_factors = UndefValue::get(getVectorType(mFP32Ty, 4));
    for (unsigned i = 0; i < SWR_NUM_OUTER_TESS_FACTORS; i++) {
       Value* v = LOAD(pTessFactors, {0, SWR_TESSELLATION_FACTORS_OuterTessFactors, i});
       sys_value_outer_factors = VINSERT(sys_value_outer_factors, v, i, "gl_TessLevelOuter");
@@ -1847,7 +1844,7 @@ BuilderSWR::CompileTES(struct swr_context *ctx, swr_jit_tes_key &key)
    system_values.tess_outer = wrap(sys_value_outer_factors);
 
    assert(SWR_NUM_INNER_TESS_FACTORS == 2);
-   Value* sys_value_inner_factors = UndefValue::get(VectorType::get(mFP32Ty, 4));
+   Value* sys_value_inner_factors = UndefValue::get(getVectorType(mFP32Ty, 4));
    for (unsigned i = 0; i < SWR_NUM_INNER_TESS_FACTORS; i++) {
       Value* v = LOAD(pTessFactors, {0, SWR_TESSELLATION_FACTORS_InnerTessFactors, i});
       sys_value_inner_factors = VINSERT(sys_value_inner_factors, v, i, "gl_TessLevelInner");



More information about the mesa-commit mailing list