Fix some casts. isdigit(c) returns 0 or 1, not 0 or -1
authorReid Spencer <rspencer@reidspencer.com>
Wed, 13 Dec 2006 08:04:32 +0000 (08:04 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Wed, 13 Dec 2006 08:04:32 +0000 (08:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32534 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/SimplifyLibCalls.cpp

index 8f2b94d1d8bb24b792b92128c2796396b5fd77db..2c3b66600b6f89aae5a4e3476b72793c8574f726 100644 (file)
@@ -1747,7 +1747,7 @@ public:
     SetCondInst* setcond_inst = new SetCondInst(Instruction::SetLE,sub_inst,
         ConstantInt::get(Type::UIntTy,9),
         ci->getOperand(1)->getName()+".cmp",ci);
-    CastInst* c2 = new SExtInst(setcond_inst, Type::IntTy, 
+    CastInst* c2 = new ZExtInst(setcond_inst, Type::IntTy, 
         ci->getOperand(1)->getName()+".isdigit", ci);
     ci->replaceAllUsesWith(c2);
     ci->eraseFromParent();
@@ -1873,7 +1873,7 @@ public:
     Value *V = CastInst::createIntegerCast(TheCall->getOperand(1), ArgType, 
                                            false/*ZExt*/, "tmp", TheCall);
     Value *V2 = new CallInst(F, V, "tmp", TheCall);
-    V2 = CastInst::createIntegerCast(V2, Type::IntTy, true/*SExt*/, 
+    V2 = CastInst::createIntegerCast(V2, Type::IntTy, false/*ZExt*/, 
                                      "tmp", TheCall);
     V2 = BinaryOperator::createAdd(V2, ConstantInt::get(Type::IntTy, 1),
                                    "tmp", TheCall);
@@ -2117,7 +2117,7 @@ bool getConstantStringLength(Value *V, uint64_t &len, ConstantArray **CA) {
 /// inserting the cast before IP, and return the cast.
 /// @brief Cast a value to a "C" string.
 Value *CastToCStr(Value *V, Instruction &IP) {
-  assert(V->getType()->getTypeID() == Type::PointerTyID && 
+  assert(isa<PointerType>(V->getType()) && 
          "Can't cast non-pointer type to C string type");
   const Type *SBPTy = PointerType::get(Type::SByteTy);
   if (V->getType() != SBPTy)