Changes in directory llvm/lib/VMCore:
Constants.cpp updated: 1.167 -> 1.168 --- Log message: Speed up isCString() --- Diffs of the changes: (+14 -4) Constants.cpp | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-) Index: llvm/lib/VMCore/Constants.cpp diff -u llvm/lib/VMCore/Constants.cpp:1.167 llvm/lib/VMCore/Constants.cpp:1.168 --- llvm/lib/VMCore/Constants.cpp:1.167 Thu Oct 26 14:15:05 2006 +++ llvm/lib/VMCore/Constants.cpp Thu Oct 26 16:48:03 2006 @@ -1077,11 +1077,21 @@ /// isString) and it ends in a null byte \0 and does not contains any other /// null bytes except its terminator. bool ConstantArray::isCString() const { - if (!isString()) return false; - // This is safe because a ConstantArray cannot be a zero array. - for (unsigned i = 0, e = getNumOperands()-1; i != e; ++i) - if (cast<ConstantInt>(getOperand(i))->getZExtValue() == 0) + // Check the element type for sbyte or ubyte... + if (getType()->getElementType() != Type::UByteTy && + getType()->getElementType() != Type::SByteTy) + return false; + Constant *Zero = Constant::getNullValue(getOperand(0)->getType()); + // Last element must be a null. + if (getOperand(getNumOperands()-1) != Zero) + return false; + // Other elements must be non-null integers. + for (unsigned i = 0, e = getNumOperands()-1; i != e; ++i) { + if (!isa<ConstantInt>(getOperand(i))) return false; + if (getOperand(i) == Zero) + return false; + } return true; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits