[llvm-commits] [llvm-gcc-4.2] r51447 - in /llvm-gcc-4.2/trunk/gcc: config/i386/llvm-i386.cpp llvm-abi.h llvm-backend.cpp llvm-convert.cpp

Dan Gohman gohman at apple.com
Thu May 22 15:24:27 PDT 2008


Author: djg
Date: Thu May 22 17:24:27 2008
New Revision: 51447

URL: http://llvm.org/viewvc/llvm-project?rev=51447&view=rev
Log:
Change uses of llvm::Type::isFirstClassType to use the new
llvm::Type::isSingleValueType. Currently these two functions have
the same behavior, but soon isFirstClassType will return true for
struct and array types.

llvm-gcc may some day want to use of isFirstClassType for some of
these some day as an optimization, but it'll require some
consideration.

Modified:
    llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp
    llvm-gcc-4.2/trunk/gcc/llvm-abi.h
    llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
    llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp?rev=51447&r1=51446&r2=51447&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp Thu May 22 17:24:27 2008
@@ -872,7 +872,7 @@
     const Type *ETy = STy->getElementType(i);
     if (const ArrayType *ATy = dyn_cast<ArrayType>(ETy))
       ETy = ATy->getElementType();
-    if (!ETy->isFirstClassType() && ETy->getTypeID() != Type::X86_FP80TyID)
+    if (!ETy->isSingleValueType() && ETy->getTypeID() != Type::X86_FP80TyID)
       return false;
     if (ETy->isInteger())
       foundInt = true;
@@ -1142,7 +1142,7 @@
     const Type *DestElemType = DestTy->getElementType(DNO);
 
     // Directly access first class values using getresult.
-    if (DestElemType->isFirstClassType()) {
+    if (DestElemType->isSingleValueType()) {
       Value *GEP = Builder.CreateStructGEP(Dest, DNO, "mrv_gep");
       GetResultInst *GR = Builder.CreateGetResult(Src, SNO, "mrv_gr");
       Builder.CreateStore(GR, GEP, isVolatile);

Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-abi.h?rev=51447&r1=51446&r2=51447&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-abi.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-abi.h Thu May 22 17:24:27 2008
@@ -363,7 +363,7 @@
         C.HandleScalarShadowArgument(PointerType::getUnqual(Ty), false);
       else
         C.HandleScalarResult(Ty);
-    } else if (Ty->isFirstClassType() || Ty == Type::VoidTy) {
+    } else if (Ty->isSingleValueType() || Ty == Type::VoidTy) {
       // Return scalar values normally.
       C.HandleScalarResult(Ty);
     } else if (doNotUseShadowReturn(type, fn)) {
@@ -417,7 +417,7 @@
         C.HandleScalarArgument(Ty, type);
         ScalarElts.push_back(Ty);
       }
-    } else if (Ty->isFirstClassType()) {
+    } else if (Ty->isSingleValueType()) {
       C.HandleScalarArgument(Ty, type);
       ScalarElts.push_back(Ty);
     } else if (LLVM_SHOULD_PASS_AGGREGATE_IN_MIXED_REGS(type, Ty, Elts)) {

Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=51447&r1=51446&r2=51447&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Thu May 22 17:24:27 2008
@@ -1078,7 +1078,7 @@
 #endif
   else if (DECL_INITIAL(decl) != 0 && TREE_STATIC(decl))
     error("global register variable has initial value");
-  else if (!Ty->isFirstClassType())
+  else if (!Ty->isSingleValueType())
     sorry("%JLLVM cannot handle register variable %qD, report a bug",
           decl, decl);
   else {

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=51447&r1=51446&r2=51447&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Thu May 22 17:24:27 2008
@@ -709,7 +709,7 @@
     const Type *ArgTy = ConvertType(TREE_TYPE(Args));
     bool isInvRef = isPassedByInvisibleReference(TREE_TYPE(Args));
     if (isInvRef ||
-        (!ArgTy->isFirstClassType() &&
+        (!ArgTy->isSingleValueType() &&
          isPassedByVal(TREE_TYPE(Args), ArgTy, ScalarArgs))) {
       // If the value is passed by 'invisible reference' or 'byval reference',
       // the l-value for the argument IS the argument itself.
@@ -1296,7 +1296,7 @@
 
   unsigned Alignment = std::min(DestLoc.Alignment, SrcLoc.Alignment);
 
-  if (ElTy->isFirstClassType()) {
+  if (ElTy->isSingleValueType()) {
     LoadInst *V = Builder.CreateLoad(SrcLoc.Ptr, SrcLoc.Volatile, "tmp");
     StoreInst *S = Builder.CreateStore(V, DestLoc.Ptr, DestLoc.Volatile);
     V->setAlignment(Alignment);
@@ -1330,7 +1330,7 @@
 /// CountAggregateElements - Return the number of elements in the specified type
 /// that will need to be loaded/stored if we copy this by explicit accesses.
 static unsigned CountAggregateElements(const Type *Ty) {
-  if (Ty->isFirstClassType()) return 1;
+  if (Ty->isSingleValueType()) return 1;
 
   if (const StructType *STy = dyn_cast<StructType>(Ty)) {
     unsigned NumElts = 0;
@@ -1381,7 +1381,7 @@
 static void ZeroAggregate(MemRef DestLoc, IRBuilder &Builder) {
   const Type *ElTy =
     cast<PointerType>(DestLoc.Ptr->getType())->getElementType();
-  if (ElTy->isFirstClassType()) {
+  if (ElTy->isSingleValueType()) {
     StoreInst *St = Builder.CreateStore(Constant::getNullValue(ElTy),
                                         DestLoc.Ptr, DestLoc.Volatile);
     St->setAlignment(DestLoc.Alignment);
@@ -2648,7 +2648,7 @@
     const Type *ArgTy = ConvertType(TREE_TYPE(TREE_VALUE(arg)));
 
     // Push the argument.
-    if (ArgTy->isFirstClassType()) {
+    if (ArgTy->isSingleValueType()) {
       // A scalar - push the value.
       Client.pushValue(Emit(TREE_VALUE(arg), 0));
     } else {
@@ -2836,7 +2836,7 @@
 
   if (!LV.isBitfield()) {
     const Type *ValTy = ConvertType(TREE_TYPE(rhs));
-    if (ValTy->isFirstClassType()) {
+    if (ValTy->isSingleValueType()) {
       // Non-bitfield, scalar value.  Just emit a store.
       Value *RHS = Emit(rhs, 0);
       // Convert RHS to the right type if we can, otherwise convert the pointer.
@@ -3200,7 +3200,7 @@
     return EmitPtrBinOp(exp, Opc);   // Pointer arithmetic!
   if (isa<StructType>(Ty))
     return EmitComplexBinOp(exp, DestLoc);
-  assert(Ty->isFirstClassType() && DestLoc == 0 &&
+  assert(Ty->isSingleValueType() && DestLoc == 0 &&
          "Bad binary operation!");
   
   Value *LHS = Emit(TREE_OPERAND(exp, 0), 0);
@@ -3617,7 +3617,7 @@
   
   // If there was an error, return something bogus.
   if (ValidateRegisterVariable(decl)) {
-    if (Ty->isFirstClassType())
+    if (Ty->isSingleValueType())
       return UndefValue::get(Ty);
     return 0;   // Just don't copy something into DestLoc.
   }
@@ -3920,7 +3920,7 @@
       cast<PointerType>(Dest.Ptr->getType())->getElementType();
     
     assert(!Dest.isBitfield() && "Cannot assign into a bitfield!");
-    if (!AllowsMem && DestValTy->isFirstClassType()) { // Reg dest -> asm return
+    if (!AllowsMem && DestValTy->isSingleValueType()) { // Reg dest -> asm return
       StoreCallResultAddrs.push_back(Dest.Ptr);
       ConstraintStr += ",=";
       ConstraintStr += SimplifiedConstraint;
@@ -3955,7 +3955,7 @@
       const Type *LLVMTy = ConvertType(type);
 
       Value *Op = 0;
-      if (LLVMTy->isFirstClassType()) {
+      if (LLVMTy->isSingleValueType()) {
         if (TREE_CODE(Val)==ADDR_EXPR &&
             TREE_CODE(TREE_OPERAND(Val,0))==LABEL_DECL) {
           // Emit the label, but do not assume it is going to be the target
@@ -4247,7 +4247,7 @@
         error("%Hunsupported target builtin %<%s%> used", &EXPR_LOCATION(exp),
               BuiltinName);
         const Type *ResTy = ConvertType(TREE_TYPE(exp));
-        if (ResTy->isFirstClassType())
+        if (ResTy->isSingleValueType())
           Result = UndefValue::get(ResTy);
         return true;
       }
@@ -5694,7 +5694,7 @@
     return BuildVector(BuildVecOps);
   }
 
-  assert(!Ty->isFirstClassType() && "Constructor for scalar type??");
+  assert(!Ty->isSingleValueType() && "Constructor for scalar type??");
   
   // Start out with the value zero'd out.
   EmitAggregateZero(*DestLoc, type);
@@ -5722,7 +5722,7 @@
     if (!tree_purpose)
       return 0;  // Not actually initialized?
 
-    if (!ConvertType(TREE_TYPE(tree_purpose))->isFirstClassType()) {
+    if (!ConvertType(TREE_TYPE(tree_purpose))->isSingleValueType()) {
       Value *V = Emit(tree_value, DestLoc);
       assert(V == 0 && "Aggregate value returned in a register?");
     } else {
@@ -5927,7 +5927,7 @@
   bool TyIsSigned = !TYPE_UNSIGNED(TREE_TYPE(exp));
   
   // If this is a structure-to-structure cast, just return the uncasted value.
-  if (!Elt->getType()->isFirstClassType() || !Ty->isFirstClassType())
+  if (!Elt->getType()->isSingleValueType() || !Ty->isSingleValueType())
     return Elt;
   
   // Elt and Ty can be integer, float or pointer here: need generalized cast





More information about the llvm-commits mailing list