forked from OSchip/llvm-project
InstCombine: fix extraction when performing vector/array punning
Differential revision: https://reviews.llvm.org/D29491 llvm-svn: 295429
This commit is contained in:
parent
7f1604aae6
commit
958fcd7502
|
@ -1209,7 +1209,6 @@ Instruction *InstCombiner::visitShuffleVectorInst(ShuffleVectorInst &SVI) {
|
|||
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::visitShuffleVectorInst(ShuffleVectorInst &SVI) {
|
|||
// 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)
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Reference in New Issue