[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