[llvm] r295429 - InstCombine: fix extraction when performing vector/array punning

Eugene Leviant via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 16 23:36:04 PST 2017


Author: evgeny777
Date: Fri Feb 17 01:36:03 2017
New Revision: 295429

URL: http://llvm.org/viewvc/llvm-project?rev=295429&view=rev
Log:
InstCombine: fix extraction when performing vector/array punning

Differential revision: https://reviews.llvm.org/D29491

Added:
    llvm/trunk/test/Transforms/InstCombine/shufflevec-bitcast.ll
Modified:
    llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp

Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp?rev=295429&r1=295428&r2=295429&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp Fri Feb 17 01:36:03 2017
@@ -1209,7 +1209,6 @@ Instruction *InstCombiner::visitShuffleV
   if (isShuffleExtractingFromLHS(SVI, Mask)) {
     Value *V = LHS;
     unsigned MaskElems = Mask.size();
-    unsigned BegIdx = Mask.front();
     VectorType *SrcTy = cast<VectorType>(V->getType());
     unsigned VecBitWidth = SrcTy->getBitWidth();
     unsigned SrcElemBitWidth = DL.getTypeSizeInBits(SrcTy->getElementType());
@@ -1223,6 +1222,7 @@ Instruction *InstCombiner::visitShuffleV
           // Only visit bitcasts that weren't previously handled.
           BCs.push_back(BC);
     for (BitCastInst *BC : BCs) {
+      unsigned BegIdx = Mask.front();
       Type *TgtTy = BC->getDestTy();
       unsigned TgtElemBitWidth = DL.getTypeSizeInBits(TgtTy);
       if (!TgtElemBitWidth)

Added: llvm/trunk/test/Transforms/InstCombine/shufflevec-bitcast.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/shufflevec-bitcast.ll?rev=295429&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/shufflevec-bitcast.ll (added)
+++ llvm/trunk/test/Transforms/InstCombine/shufflevec-bitcast.ll Fri Feb 17 01:36:03 2017
@@ -0,0 +1,16 @@
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+define void @test(<16 x i8> %w, i32* %o1, float* %o2) {
+
+; CHECK:       %v.bc = bitcast <16 x i8> %w to <4 x i32>
+; CHECK-NEXT:  %v.extract = extractelement <4 x i32> %v.bc, i32 3
+; CHECK-NEXT:  %v.bc{{[0-9]*}} = bitcast <16 x i8> %w to <4 x float>
+; CHECK-NEXT:  %v.extract{{[0-9]*}} = extractelement <4 x float> %v.bc{{[0-9]*}}, i32 3
+
+  %v = shufflevector <16 x i8> %w, <16 x i8> undef, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
+  %f = bitcast <4 x i8> %v to float
+  %i = bitcast <4 x i8> %v to i32
+  store i32 %i, i32* %o1, align 4
+  store float %f, float* %o2, align 4
+  ret void
+}




More information about the llvm-commits mailing list