mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Optimization: bitcast (<1 x ...> insertelement ..., X, ...) to ... ==> bitcast X to ...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174905 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
71490fa946
commit
9c213cc3c3
@ -1738,11 +1738,22 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (VectorType *SrcVTy = dyn_cast<VectorType>(SrcTy)) {
|
if (VectorType *SrcVTy = dyn_cast<VectorType>(SrcTy)) {
|
||||||
if (SrcVTy->getNumElements() == 1 && !DestTy->isVectorTy()) {
|
if (SrcVTy->getNumElements() == 1) {
|
||||||
Value *Elem =
|
// If our destination is not a vector, then make this a straight
|
||||||
Builder->CreateExtractElement(Src,
|
// scalar-scalar cast.
|
||||||
Constant::getNullValue(Type::getInt32Ty(CI.getContext())));
|
if (!DestTy->isVectorTy()) {
|
||||||
return CastInst::Create(Instruction::BitCast, Elem, DestTy);
|
Value *Elem =
|
||||||
|
Builder->CreateExtractElement(Src,
|
||||||
|
Constant::getNullValue(Type::getInt32Ty(CI.getContext())));
|
||||||
|
return CastInst::Create(Instruction::BitCast, Elem, DestTy);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, see if our source is an insert. If so, then use the scalar
|
||||||
|
// component directly.
|
||||||
|
if (InsertElementInst *IEI =
|
||||||
|
dyn_cast<InsertElementInst>(CI.getOperand(0)))
|
||||||
|
return CastInst::Create(Instruction::BitCast, IEI->getOperand(1),
|
||||||
|
DestTy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,4 +137,10 @@ define i32 @All111(i32 %in) {
|
|||||||
; CHECK: ret i32 0
|
; CHECK: ret i32 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define <2 x i16> @BitcastInsert(i32 %a) {
|
||||||
|
%v = insertelement <1 x i32> undef, i32 %a, i32 0
|
||||||
|
%r = bitcast <1 x i32> %v to <2 x i16>
|
||||||
|
ret <2 x i16> %r
|
||||||
|
; CHECK: @BitcastInsert
|
||||||
|
; CHECK: bitcast i32 %a to <2 x i16>
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user