mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
Fix test: Transforms/LevelRaise/2003-11-28-IllegalTypeConversion.ll
Some gep generalization changes llvm-svn: 10252
This commit is contained in:
parent
2958f1eae7
commit
a29f6743a1
@ -257,7 +257,6 @@ bool ExpressionConvertibleToType(Value *V, const Type *Ty,
|
|||||||
// and we could convert this to an appropriate GEP for the new type.
|
// and we could convert this to an appropriate GEP for the new type.
|
||||||
//
|
//
|
||||||
if (GEP->getNumOperands() == 2 &&
|
if (GEP->getNumOperands() == 2 &&
|
||||||
GEP->getOperand(1)->getType() == Type::LongTy &&
|
|
||||||
GEP->getType() == PointerType::get(Type::SByteTy)) {
|
GEP->getType() == PointerType::get(Type::SByteTy)) {
|
||||||
|
|
||||||
// Do not Check to see if our incoming pointer can be converted
|
// Do not Check to see if our incoming pointer can be converted
|
||||||
@ -285,7 +284,6 @@ bool ExpressionConvertibleToType(Value *V, const Type *Ty,
|
|||||||
// getelemenptr [[int] *] * %reg115, long %reg138 ; [int]**
|
// getelemenptr [[int] *] * %reg115, long %reg138 ; [int]**
|
||||||
//
|
//
|
||||||
if (GEP->getNumOperands() == 2 &&
|
if (GEP->getNumOperands() == 2 &&
|
||||||
GEP->getOperand(1)->getType() == Type::LongTy &&
|
|
||||||
PTy->getElementType()->isSized() &&
|
PTy->getElementType()->isSized() &&
|
||||||
TD.getTypeSize(PTy->getElementType()) ==
|
TD.getTypeSize(PTy->getElementType()) ==
|
||||||
TD.getTypeSize(GEP->getType()->getElementType())) {
|
TD.getTypeSize(GEP->getType()->getElementType())) {
|
||||||
@ -466,11 +464,10 @@ Value *ConvertExpressionToType(Value *V, const Type *Ty, ValueMapCache &VMC,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Res == 0 && GEP->getNumOperands() == 2 &&
|
if (Res == 0 && GEP->getNumOperands() == 2 &&
|
||||||
GEP->getOperand(1)->getType() == Type::LongTy &&
|
|
||||||
GEP->getType() == PointerType::get(Type::SByteTy)) {
|
GEP->getType() == PointerType::get(Type::SByteTy)) {
|
||||||
|
|
||||||
// Otherwise, we can convert a GEP from one form to the other iff the
|
// Otherwise, we can convert a GEP from one form to the other iff the
|
||||||
// current gep is of the form 'getelementptr [sbyte]*, unsigned N
|
// current gep is of the form 'getelementptr sbyte*, unsigned N
|
||||||
// and we could convert this to an appropriate GEP for the new type.
|
// and we could convert this to an appropriate GEP for the new type.
|
||||||
//
|
//
|
||||||
const PointerType *NewSrcTy = PointerType::get(PVTy);
|
const PointerType *NewSrcTy = PointerType::get(PVTy);
|
||||||
@ -774,8 +771,12 @@ static bool OperandConvertibleToType(User *U, Value *V, const Type *Ty,
|
|||||||
TD.getTypeSize(ElTy) != TD.getTypeSize(I->getOperand(0)->getType()))
|
TD.getTypeSize(ElTy) != TD.getTypeSize(I->getOperand(0)->getType()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Can convert store if the incoming value is convertible...
|
// Can convert store if the incoming value is convertible and if the
|
||||||
return ExpressionConvertibleToType(I->getOperand(0), ElTy, CTMap, TD);
|
// result will preserve semantics...
|
||||||
|
const Type *Op0Ty = I->getOperand(0)->getType();
|
||||||
|
if (!(Op0Ty->isIntegral() ^ ElTy->isIntegral()) &&
|
||||||
|
!(Op0Ty->isFloatingPoint() ^ ElTy->isFloatingPoint()))
|
||||||
|
return ExpressionConvertibleToType(I->getOperand(0), ElTy, CTMap, TD);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user