From f5ac6c27acd65ae2c9eafd355b781123d9882087 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 1 Jan 2005 15:59:57 +0000 Subject: [PATCH] Allow getZeroExtend and getSignExtend to work with boolean inputs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19210 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Constants.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index f09e3b94bb5..b5de2780336 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -1239,18 +1239,26 @@ Constant *ConstantExpr::getCast(Constant *C, const Type *Ty) { } Constant *ConstantExpr::getSignExtend(Constant *C, const Type *Ty) { - assert(C->getType()->isInteger() && Ty->isInteger() && + assert(C->getType()->isIntegral() && Ty->isIntegral() && C->getType()->getPrimitiveSize() <= Ty->getPrimitiveSize() && "This is an illegal sign extension!"); - C = ConstantExpr::getCast(C, C->getType()->getSignedVersion()); - return ConstantExpr::getCast(C, Ty); + if (C->getType() != Type::BoolTy) { + C = ConstantExpr::getCast(C, C->getType()->getSignedVersion()); + return ConstantExpr::getCast(C, Ty); + } else { + if (C == ConstantBool::True) + return ConstantIntegral::getAllOnesValue(Ty); + else + return ConstantIntegral::getNullValue(Ty); + } } Constant *ConstantExpr::getZeroExtend(Constant *C, const Type *Ty) { - assert(C->getType()->isInteger() && Ty->isInteger() && + assert(C->getType()->isIntegral() && Ty->isIntegral() && C->getType()->getPrimitiveSize() <= Ty->getPrimitiveSize() && "This is an illegal zero extension!"); - C = ConstantExpr::getCast(C, C->getType()->getUnsignedVersion()); + if (C->getType() != Type::BoolTy) + C = ConstantExpr::getCast(C, C->getType()->getUnsignedVersion()); return ConstantExpr::getCast(C, Ty); }