[PATCH] D29491: InstCombine: fix extraction when performing vector/array punning
Eugene Leviant via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 16 23:47:38 PST 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL295429: InstCombine: fix extraction when performing vector/array punning (authored by evgeny777).
Changed prior to commit:
https://reviews.llvm.org/D29491?vs=86954&id=88862#toc
Repository:
rL LLVM
https://reviews.llvm.org/D29491
Files:
llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
llvm/trunk/test/Transforms/InstCombine/shufflevec-bitcast.ll
Index: llvm/trunk/test/Transforms/InstCombine/shufflevec-bitcast.ll
===================================================================
--- llvm/trunk/test/Transforms/InstCombine/shufflevec-bitcast.ll
+++ llvm/trunk/test/Transforms/InstCombine/shufflevec-bitcast.ll
@@ -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
+}
Index: llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
===================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
@@ -1209,7 +1209,6 @@
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 @@
// 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)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29491.88862.patch
Type: text/x-patch
Size: 1883 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170217/971c1746/attachment.bin>
More information about the llvm-commits
mailing list