Implement "unsafe" replaceAllUsesWWith stuff for use during type resolution.
authorChris Lattner <sabre@nondot.org>
Fri, 29 Aug 2003 05:36:46 +0000 (05:36 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 29 Aug 2003 05:36:46 +0000 (05:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8209 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Constants.cpp

index 7051814a7c0362470f222f54bfc08b9823c56602..20f99134892976e8b25d04574b09715276648482 100644 (file)
@@ -350,9 +350,6 @@ bool ConstantFP::isValueValidForType(const Type *Ty, double Val) {
 
     // TODO: Figure out how to test if a double can be cast to a float!
   case Type::FloatTyID:
-    /*
-    return (Val <= UINT8_MAX);
-    */
   case Type::DoubleTyID:
     return true;          // This is the largest type...
   }
@@ -361,7 +358,8 @@ bool ConstantFP::isValueValidForType(const Type *Ty, double Val) {
 //===----------------------------------------------------------------------===//
 //                replaceUsesOfWithOnConstant implementations
 
-void ConstantArray::replaceUsesOfWithOnConstant(Value *From, Value *To) {
+void ConstantArray::replaceUsesOfWithOnConstant(Value *From, Value *To,
+                                                bool DisableChecking) {
   assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
 
   std::vector<Constant*> Values;
@@ -376,13 +374,17 @@ void ConstantArray::replaceUsesOfWithOnConstant(Value *From, Value *To) {
   assert(Replacement != this && "I didn't contain From!");
 
   // Everyone using this now uses the replacement...
-  replaceAllUsesWith(Replacement);
+  if (DisableChecking)
+    uncheckedReplaceAllUsesWith(Replacement);
+  else
+    replaceAllUsesWith(Replacement);
   
   // Delete the old constant!
   destroyConstant();  
 }
 
-void ConstantStruct::replaceUsesOfWithOnConstant(Value *From, Value *To) {
+void ConstantStruct::replaceUsesOfWithOnConstant(Value *From, Value *To,
+                                                 bool DisableChecking) {
   assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
 
   std::vector<Constant*> Values;
@@ -397,33 +399,42 @@ void ConstantStruct::replaceUsesOfWithOnConstant(Value *From, Value *To) {
   assert(Replacement != this && "I didn't contain From!");
 
   // Everyone using this now uses the replacement...
-  replaceAllUsesWith(Replacement);
+  if (DisableChecking)
+    uncheckedReplaceAllUsesWith(Replacement);
+  else
+    replaceAllUsesWith(Replacement);
   
   // Delete the old constant!
   destroyConstant();
 }
 
-void ConstantPointerRef::replaceUsesOfWithOnConstant(Value *From, Value *To) {
+void ConstantPointerRef::replaceUsesOfWithOnConstant(Value *From, Value *To,
+                                                     bool DisableChecking) {
   if (isa<GlobalValue>(To)) {
     assert(From == getOperand(0) && "Doesn't contain from!");
     ConstantPointerRef *Replacement =
       ConstantPointerRef::get(cast<GlobalValue>(To));
     
     // Everyone using this now uses the replacement...
-    replaceAllUsesWith(Replacement);
+    if (DisableChecking)
+      uncheckedReplaceAllUsesWith(Replacement);
+    else
+      replaceAllUsesWith(Replacement);
     
-    // Delete the old constant!
-    destroyConstant();
   } else {
     // Just replace ourselves with the To value specified.
-    replaceAllUsesWith(To);
-  
-    // Delete the old constant!
-    destroyConstant();
+    if (DisableChecking)
+      uncheckedReplaceAllUsesWith(To);
+    else
+      replaceAllUsesWith(To);
   }
+
+  // Delete the old constant!
+  destroyConstant();
 }
 
-void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *ToV) {
+void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *ToV,
+                                               bool DisableChecking) {
   assert(isa<Constant>(ToV) && "Cannot make Constant refer to non-constant!");
   Constant *To = cast<Constant>(ToV);
 
@@ -457,7 +468,10 @@ void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *ToV) {
   assert(Replacement != this && "I didn't contain From!");
 
   // Everyone using this now uses the replacement...
-  replaceAllUsesWith(Replacement);
+  if (DisableChecking)
+    uncheckedReplaceAllUsesWith(Replacement);
+  else
+    replaceAllUsesWith(Replacement);
   
   // Delete the old constant!
   destroyConstant();