]> granicus.if.org Git - clang/commitdiff
Change uses of llvm::Type::isFirstClassType to use the new
authorDan Gohman <gohman@apple.com>
Thu, 22 May 2008 22:12:56 +0000 (22:12 +0000)
committerDan Gohman <gohman@apple.com>
Thu, 22 May 2008 22:12:56 +0000 (22:12 +0000)
llvm::Type::isSingleValueType. Currently these two functions have
the same behavior, but soon isFirstClassType will return true for
struct and array types.

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51446 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDecl.cpp
lib/CodeGen/CGExpr.cpp
lib/CodeGen/CGExprAgg.cpp
lib/CodeGen/CGStmt.cpp
lib/CodeGen/CodeGenTypes.cpp

index bd68288bba30f8337ea39bc70eb88433cbabff10..6e40ea05829f3a5e9a561aed970102b4f2210c16 100644 (file)
@@ -169,9 +169,9 @@ void CodeGenFunction::EmitParmDecl(const ParmVarDecl &D, llvm::Value *Arg) {
   } else if (Target.useGlobalsForAutomaticVariables()) {
     DeclPtr = GenerateStaticBlockVarDecl(D, true, ".arg.");
   } else {
-    // A fixed sized first class variable becomes an alloca in the entry block.
+    // A fixed sized single-value variable becomes an alloca in the entry block.
     const llvm::Type *LTy = ConvertType(Ty);
-    if (LTy->isFirstClassType()) {
+    if (LTy->isSingleValueType()) {
       // TODO: Alignment
       DeclPtr = new llvm::AllocaInst(LTy, 0, std::string(D.getName())+".addr",
                                      AllocaInsertPt);
index b124e34be33a459d26d8dd09ce9a3e312288a6ed..d715b45229775396b37cb77fed129817f48b208e 100644 (file)
@@ -133,7 +133,7 @@ RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) {
       cast<llvm::PointerType>(Ptr->getType())->getElementType();
     
     // Simple scalar l-value.
-    if (EltTy->isFirstClassType()) {
+    if (EltTy->isSingleValueType()) {
       llvm::Value *V = Builder.CreateLoad(Ptr, "tmp");
       
       // Bool can have different representation in memory than in registers.
index 2ac473439e67fc1f37967a05137b6b02f1c47d7b..f584980d7f8af1a12ae5ecdf676261a2bd789bb6 100644 (file)
@@ -298,7 +298,7 @@ void AggExprEmitter::EmitNonConstInit(InitListExpr *E) {
     const llvm::Type *EType = AType->getElementType();
     for (/*Do not initialize i*/; i < NumArrayElements; ++i) {
       llvm::Value *NextVal = Builder.CreateStructGEP(DestPtr, i, ".array");
-      if (EType->isFirstClassType())
+      if (EType->isSingleValueType())
         Builder.CreateStore(llvm::Constant::getNullValue(EType), NextVal);
       else
         EmitAggregateClear(NextVal, QType);
index 0148ab0d842abfe6589a52eabdcf593efb9d3505..c38ad04001da803e827b8fda76c8e62ac42ba7db 100644 (file)
@@ -688,7 +688,7 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
     // If the first output operand is not a memory dest, we'll
     // make it the return value.
     if (i == 0 && !(Info & TargetInfo::CI_AllowsMemory) &&
-        DestValueType->isFirstClassType()) {
+        DestValueType->isSingleValueType()) {
       ResultAddr = Dest.getAddress();
       ResultType = DestValueType;
       Constraints += "=" + OutputConstraint;
@@ -709,10 +709,10 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
       llvm::Value *Arg;
       if ((Info & TargetInfo::CI_AllowsRegister) ||
           !(Info & TargetInfo::CI_AllowsMemory)) {      
-        if (ConvertType(InputExpr->getType())->isFirstClassType()) {
+        if (ConvertType(InputExpr->getType())->isSingleValueType()) {
           Arg = EmitScalarExpr(InputExpr);
         } else {
-          assert(0 && "FIXME: Implement passing non first class types as inputs");
+          assert(0 && "FIXME: Implement passing multiple-value types as inputs");
         }
       } else {
         LValue Dest = EmitLValue(InputExpr);
@@ -750,10 +750,10 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
     
     if ((Info & TargetInfo::CI_AllowsRegister) ||
         !(Info & TargetInfo::CI_AllowsMemory)) {      
-      if (ConvertType(InputExpr->getType())->isFirstClassType()) {
+      if (ConvertType(InputExpr->getType())->isSingleValueType()) {
         Arg = EmitScalarExpr(InputExpr);
       } else {
-        assert(0 && "FIXME: Implement passing non first class types as inputs");
+        assert(0 && "FIXME: Implement passing multiple-value types as inputs");
       }
     } else {
       LValue Dest = EmitLValue(InputExpr);
index 154405015592d6980edf14632582832f06b40462..bd375ee6a99eee9a18f559724788e3f77453e3e2 100644 (file)
@@ -279,7 +279,7 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) {
     std::vector<const llvm::Type*> ArgTys;
     
     // Struct return passes the struct byref.
-    if (!ResultType->isFirstClassType() && ResultType != llvm::Type::VoidTy) {
+    if (!ResultType->isSingleValueType() && ResultType != llvm::Type::VoidTy) {
       ArgTys.push_back(llvm::PointerType::get(ResultType, 
                                         FP.getResultType().getAddressSpace()));
       ResultType = llvm::Type::VoidTy;
@@ -352,7 +352,7 @@ void CodeGenTypes::DecodeArgumentTypes(const FunctionTypeProto &FTP,
                                        std::vector<const llvm::Type*> &ArgTys) {
   for (unsigned i = 0, e = FTP.getNumArgs(); i != e; ++i) {
     const llvm::Type *Ty = ConvertTypeRecursive(FTP.getArgType(i));
-    if (Ty->isFirstClassType())
+    if (Ty->isSingleValueType())
       ArgTys.push_back(Ty);
     else
       // byval arguments are always on the stack, which is addr space #0.