[llvm-commits] [llvm] r64226 - /llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp

Devang Patel dpatel at apple.com
Tue Feb 10 11:28:07 PST 2009


Author: dpatel
Date: Tue Feb 10 13:28:07 2009
New Revision: 64226

URL: http://llvm.org/viewvc/llvm-project?rev=64226&view=rev
Log:
Use early exits. Reduce indentation.

Modified:
    llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=64226&r1=64225&r2=64226&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Tue Feb 10 13:28:07 2009
@@ -1142,47 +1142,52 @@
   gep_type_iterator I = gep_type_begin(GEPI);
   ++I;
   
-  if (const ArrayType *AT = dyn_cast<ArrayType>(*I)) {
-    uint64_t NumElements = AT->getNumElements();
-    
-    if (!isa<ConstantInt>(I.getOperand())) {
-      if (NumElements == 1) {
-        GEPI->setOperand(2, Constant::getNullValue(Type::Int32Ty));
-      } else {
-        assert(NumElements == 2 && "Unhandled case!");
-        // All users of the GEP must be loads.  At each use of the GEP, insert
-        // two loads of the appropriate indexed GEP and select between them.
-        Value *IsOne = new ICmpInst(ICmpInst::ICMP_NE, I.getOperand(), 
-                                    Constant::getNullValue(I.getOperand()->getType()),
-                                    "isone", GEPI);
-        // Insert the new GEP instructions, which are properly indexed.
-        SmallVector<Value*, 8> Indices(GEPI->op_begin()+1, GEPI->op_end());
-        Indices[1] = Constant::getNullValue(Type::Int32Ty);
-        Value *ZeroIdx = GetElementPtrInst::Create(GEPI->getOperand(0),
-                                                   Indices.begin(),
-                                                   Indices.end(),
-                                                   GEPI->getName()+".0", GEPI);
-        Indices[1] = ConstantInt::get(Type::Int32Ty, 1);
-        Value *OneIdx = GetElementPtrInst::Create(GEPI->getOperand(0),
-                                                  Indices.begin(),
-                                                  Indices.end(),
-                                                  GEPI->getName()+".1", GEPI);
-        // Replace all loads of the variable index GEP with loads from both
-        // indexes and a select.
-        while (!GEPI->use_empty()) {
-          LoadInst *LI = cast<LoadInst>(GEPI->use_back());
-          Value *Zero = new LoadInst(ZeroIdx, LI->getName()+".0", LI);
-          Value *One  = new LoadInst(OneIdx , LI->getName()+".1", LI);
-          Value *R = SelectInst::Create(IsOne, One, Zero, LI->getName(), LI);
-          LI->replaceAllUsesWith(R);
-          LI->eraseFromParent();
-        }
-        GEPI->eraseFromParent();
-      }
-    }
+  const ArrayType *AT = dyn_cast<ArrayType>(*I);
+  if (!AT) 
+    return;
+
+  uint64_t NumElements = AT->getNumElements();
+  
+  if (isa<ConstantInt>(I.getOperand()))
+    return;
+
+  if (NumElements == 1) {
+    GEPI->setOperand(2, Constant::getNullValue(Type::Int32Ty));
+    return;
+  } 
+    
+  assert(NumElements == 2 && "Unhandled case!");
+  // All users of the GEP must be loads.  At each use of the GEP, insert
+  // two loads of the appropriate indexed GEP and select between them.
+  Value *IsOne = new ICmpInst(ICmpInst::ICMP_NE, I.getOperand(), 
+                              Constant::getNullValue(I.getOperand()->getType()),
+                              "isone", GEPI);
+  // Insert the new GEP instructions, which are properly indexed.
+  SmallVector<Value*, 8> Indices(GEPI->op_begin()+1, GEPI->op_end());
+  Indices[1] = Constant::getNullValue(Type::Int32Ty);
+  Value *ZeroIdx = GetElementPtrInst::Create(GEPI->getOperand(0),
+                                             Indices.begin(),
+                                             Indices.end(),
+                                             GEPI->getName()+".0", GEPI);
+  Indices[1] = ConstantInt::get(Type::Int32Ty, 1);
+  Value *OneIdx = GetElementPtrInst::Create(GEPI->getOperand(0),
+                                            Indices.begin(),
+                                            Indices.end(),
+                                            GEPI->getName()+".1", GEPI);
+  // Replace all loads of the variable index GEP with loads from both
+  // indexes and a select.
+  while (!GEPI->use_empty()) {
+    LoadInst *LI = cast<LoadInst>(GEPI->use_back());
+    Value *Zero = new LoadInst(ZeroIdx, LI->getName()+".0", LI);
+    Value *One  = new LoadInst(OneIdx , LI->getName()+".1", LI);
+    Value *R = SelectInst::Create(IsOne, One, Zero, LI->getName(), LI);
+    LI->replaceAllUsesWith(R);
+    LI->eraseFromParent();
   }
+  GEPI->eraseFromParent();
 }
 
+
 /// CleanupAllocaUsers - If SROA reported that it can promote the specified
 /// allocation, but only if cleaned up, perform the cleanups required.
 void SROA::CleanupAllocaUsers(AllocationInst *AI) {





More information about the llvm-commits mailing list