simplify the clang codegen by using the new Builder.CreateStructGEP method.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48534 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 932a5c5..1642e2d 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -367,13 +367,9 @@
   case UnaryOperator::Real:
   case UnaryOperator::Imag:
     LValue LV = EmitLValue(E->getSubExpr());
-
-    llvm::Constant *Zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0);
-    llvm::Constant *Idx  = llvm::ConstantInt::get(llvm::Type::Int32Ty,
-                                        E->getOpcode() == UnaryOperator::Imag);
-    llvm::Value *Ops[] = {Zero, Idx};
-    return LValue::MakeAddr(Builder.CreateGEP(LV.getAddress(), Ops, Ops+2,
-                                              "idx"));
+    unsigned Idx = E->getOpcode() == UnaryOperator::Imag;
+    return LValue::MakeAddr(Builder.CreateStructGEP(LV.getAddress(),
+                                                    Idx, "idx"));
   }
 }
 
@@ -490,9 +486,11 @@
   llvm::Value *V;
   unsigned idx = CGM.getTypes().getLLVMFieldNo(Field);
 
-  if (Field->isBitField()) {
-    const llvm::Type * FieldTy = ConvertType(Field->getType());
-    const llvm::PointerType * BaseTy =
+  if (!Field->isBitField()) {
+    V = Builder.CreateStructGEP(BaseValue, idx, "tmp");
+  } else {
+    const llvm::Type *FieldTy = ConvertType(Field->getType());
+    const llvm::PointerType *BaseTy =
       cast<llvm::PointerType>(BaseValue->getType());
     unsigned AS = BaseTy->getAddressSpace();
     BaseValue = Builder.CreateBitCast(BaseValue,
@@ -501,11 +499,8 @@
     V = Builder.CreateGEP(BaseValue,
                           llvm::ConstantInt::get(llvm::Type::Int32Ty, idx),
                           "tmp");
-  } else {
-    llvm::Value *Idxs[2] = { llvm::Constant::getNullValue(llvm::Type::Int32Ty),
-                             llvm::ConstantInt::get(llvm::Type::Int32Ty, idx) };
-    V = Builder.CreateGEP(BaseValue,Idxs, Idxs + 2, "tmp");
   }
+  
   // Match union field type.
   if (isUnion) {
     const llvm::Type * FieldTy = ConvertType(Field->getType());
@@ -519,13 +514,13 @@
     }
   }
 
-  if (Field->isBitField()) {
-    CodeGenTypes::BitFieldInfo bitFieldInfo =
-      CGM.getTypes().getBitFieldInfo(Field);
-    return LValue::MakeBitfield(V, bitFieldInfo.Begin, bitFieldInfo.Size,
-                                Field->getType()->isSignedIntegerType());
-  } else
+  if (!Field->isBitField())
     return LValue::MakeAddr(V);
+    
+  CodeGenTypes::BitFieldInfo bitFieldInfo =
+    CGM.getTypes().getBitFieldInfo(Field);
+  return LValue::MakeBitfield(V, bitFieldInfo.Begin, bitFieldInfo.Size,
+                              Field->getType()->isSignedIntegerType());
 }
 
 //===--------------------------------------------------------------------===//