From b25efa36e674295136ab81d741e575fa43e30edc Mon Sep 17 00:00:00 2001 From: George Kyriazis Date: Mon, 12 Feb 2018 13:38:45 -0600 Subject: [PATCH] swr/rast: Fix GATHERPS to avoid assertions. With the pBase type change, LLVM was asserting because of wrong types. Cast appropriately. Reviewed-by: Bruce Cherniak --- src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp index 98d4354c410..6e462d522f7 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp +++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp @@ -140,6 +140,7 @@ namespace SwrJit Value *Builder::GATHERPS(Value *vSrc, Value *pBase, Value *vIndices, Value *vMask, uint8_t scale) { Value *vGather; + Value *pBasePtr = INT_TO_PTR(pBase, PointerType::get(mInt8Ty, 0)); // use avx2 gather instruction if available if (JM()->mArch.AVX2()) @@ -147,7 +148,7 @@ namespace SwrJit // force mask to , required by vgather Value *mask = BITCAST(VMASK(vMask), mSimdFP32Ty); - vGather = VGATHERPS(vSrc, pBase, vIndices, mask, C(scale)); + vGather = VGATHERPS(vSrc, pBasePtr, vIndices, mask, C(scale)); } else { @@ -165,7 +166,7 @@ namespace SwrJit // single component byte index Value *offset = VEXTRACT(vOffsets, C(i)); // byte pointer to component - Value *loadAddress = GEP(pBase, offset); + Value *loadAddress = GEP(pBasePtr, offset); loadAddress = BITCAST(loadAddress, PointerType::get(mFP32Ty, 0)); // pointer to the value to load if we're masking off a component Value *maskLoadAddress = GEP(vSrcPtr, { C(0), C(i) }); -- 2.30.2