Bitcasts are transitive. Bitcast-Bitcast-X becomes Bitcast-X.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138722 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nadav Rotem
2011-08-28 11:51:08 +00:00
parent b1b051ec97
commit be6ceb6ebc
3 changed files with 25 additions and 0 deletions

View File

@ -51,6 +51,12 @@ static Constant *FoldBitCast(Constant *C, Type *DestTy,
if (C->isAllOnesValue() && !DestTy->isX86_MMXTy())
return Constant::getAllOnesValue(DestTy);
// Bitcast of Bitcast can be done using a single cast.
ConstantExpr *CE = dyn_cast<ConstantExpr>(C);
if (CE && CE->getOpcode() == Instruction::BitCast) {
return ConstantExpr::getBitCast(CE->getOperand(0), DestTy);
}
// The code below only handles casts to vectors currently.
VectorType *DestVTy = dyn_cast<VectorType>(DestTy);
if (DestVTy == 0)