mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Implement casts.ll:test26: a cast from float -> double -> integer, doesn't
need the float->double part. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25452 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6b8800d6a6
commit
bc528efa76
@ -3799,8 +3799,8 @@ static CastType getCastType(const Type *Src, const Type *Dest) {
|
||||
// isEliminableCastOfCast - Return true if it is valid to eliminate the CI
|
||||
// instruction.
|
||||
//
|
||||
static inline bool isEliminableCastOfCast(const Type *SrcTy, const Type *MidTy,
|
||||
const Type *DstTy, TargetData *TD) {
|
||||
static bool isEliminableCastOfCast(const Type *SrcTy, const Type *MidTy,
|
||||
const Type *DstTy, TargetData *TD) {
|
||||
|
||||
// It is legal to eliminate the instruction if casting A->B->A if the sizes
|
||||
// are identical and the bits don't get reinterpreted (for example
|
||||
@ -3856,6 +3856,15 @@ static inline bool isEliminableCastOfCast(const Type *SrcTy, const Type *MidTy,
|
||||
return ResultCast == FirstCast;
|
||||
}
|
||||
}
|
||||
|
||||
// If this is a cast from 'float -> double -> integer', cast from
|
||||
// 'float -> integer' directly, as the value isn't changed by the
|
||||
// float->double conversion.
|
||||
if (SrcTy->isFloatingPoint() && MidTy->isFloatingPoint() &&
|
||||
DstTy->isIntegral() &&
|
||||
SrcTy->getPrimitiveSize() < MidTy->getPrimitiveSize())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user