[clang] Enable direct methods and fast alloc calls for libobjc2. (PR #78030)

via cfe-commits cfe-commits at lists.llvm.org
Sat Jan 13 04:43:20 PST 2024


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff 8f76f1816ea63b7cc28e150ba319ffbfe6351f9e b286b9b07d60a7b3243ad5e8e6959a4d7d7fda49 -- clang/include/clang/Basic/ObjCRuntime.h clang/lib/CodeGen/CGObjCGNU.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp
index a71f42169f..44fdef5ac5 100644
--- a/clang/lib/CodeGen/CGObjCGNU.cpp
+++ b/clang/lib/CodeGen/CGObjCGNU.cpp
@@ -2030,78 +2030,78 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
       // ...
 
       if (OMD->isClassMethod()) {
-      const ObjCInterfaceDecl *OID = cast<ObjCInterfaceDecl>(CD);
+        const ObjCInterfaceDecl *OID = cast<ObjCInterfaceDecl>(CD);
 
-      // Nullable `Class` expressions cannot be messaged with a direct method
-      // so the only reason why the receive can be null would be because
-      // of weak linking.
-      ReceiverCanBeNull = isWeakLinkedClass(OID);
+        // Nullable `Class` expressions cannot be messaged with a direct method
+        // so the only reason why the receive can be null would be because
+        // of weak linking.
+        ReceiverCanBeNull = isWeakLinkedClass(OID);
       }
 
       if (ReceiverCanBeNull) {
-      llvm::BasicBlock *SelfIsNilBlock =
-          CGF.createBasicBlock("objc_direct_method.self_is_nil");
-      llvm::BasicBlock *ContBlock =
-          CGF.createBasicBlock("objc_direct_method.cont");
-
-      // if (self == nil) {
-      auto selfTy = cast<llvm::PointerType>(selfValue->getType());
-      auto Zero = llvm::ConstantPointerNull::get(selfTy);
-
-      llvm::MDBuilder MDHelper(CGM.getLLVMContext());
-      Builder.CreateCondBr(Builder.CreateICmpEQ(selfValue, Zero),
-                           SelfIsNilBlock, ContBlock,
-                           MDHelper.createBranchWeights(1, 1 << 20));
-
-      CGF.EmitBlock(SelfIsNilBlock);
-
-      //   return (ReturnType){ };
-      auto retTy = OMD->getReturnType();
-      Builder.SetInsertPoint(SelfIsNilBlock);
-      if (!retTy->isVoidType()) {
-        CGF.EmitNullInitialization(CGF.ReturnValue, retTy);
-      }
-      CGF.EmitBranchThroughCleanup(CGF.ReturnBlock);
-      // }
+        llvm::BasicBlock *SelfIsNilBlock =
+            CGF.createBasicBlock("objc_direct_method.self_is_nil");
+        llvm::BasicBlock *ContBlock =
+            CGF.createBasicBlock("objc_direct_method.cont");
+
+        // if (self == nil) {
+        auto selfTy = cast<llvm::PointerType>(selfValue->getType());
+        auto Zero = llvm::ConstantPointerNull::get(selfTy);
+
+        llvm::MDBuilder MDHelper(CGM.getLLVMContext());
+        Builder.CreateCondBr(Builder.CreateICmpEQ(selfValue, Zero),
+                             SelfIsNilBlock, ContBlock,
+                             MDHelper.createBranchWeights(1, 1 << 20));
+
+        CGF.EmitBlock(SelfIsNilBlock);
+
+        //   return (ReturnType){ };
+        auto retTy = OMD->getReturnType();
+        Builder.SetInsertPoint(SelfIsNilBlock);
+        if (!retTy->isVoidType()) {
+          CGF.EmitNullInitialization(CGF.ReturnValue, retTy);
+        }
+        CGF.EmitBranchThroughCleanup(CGF.ReturnBlock);
+        // }
 
-      // rest of the body
-      CGF.EmitBlock(ContBlock);
-      Builder.SetInsertPoint(ContBlock);
+        // rest of the body
+        CGF.EmitBlock(ContBlock);
+        Builder.SetInsertPoint(ContBlock);
       }
 
       if (OMD->isClassMethod()) {
-      // Prefix of the class type.
-      auto *classStart =
-          llvm::StructType::get(PtrTy, PtrTy, PtrTy, LongTy, LongTy);
-      auto &astContext = CGM.getContext();
-      auto flags = Builder.CreateLoad(
-          Address{Builder.CreateStructGEP(classStart, selfValue, 4), LongTy,
-                  CharUnits::fromQuantity(
-                      astContext.getTypeAlign(astContext.UnsignedLongTy))});
-      auto isInitialized = Builder.CreateAnd(flags, (1 << 8));
-      llvm::BasicBlock *notInitializedBlock =
-          CGF.createBasicBlock("objc_direct_method.send_initialize");
-      llvm::BasicBlock *initializedBlock =
-          CGF.createBasicBlock("objc_direct_method.class_initialized");
-      llvm::MDBuilder MDHelper(CGM.getLLVMContext());
-      Builder.CreateCondBr(Builder.CreateICmpEQ(isInitialized, Zeros[0]),
-                           notInitializedBlock, initializedBlock,
-                           MDHelper.createBranchWeights(1, 1 << 20));
-      CGF.EmitBlock(notInitializedBlock);
-      Builder.SetInsertPoint(notInitializedBlock);
-      CGF.EmitRuntimeCall(SentInitializeFn, selfValue);
-      Builder.CreateBr(initializedBlock);
-      CGF.EmitBlock(initializedBlock);
-      Builder.SetInsertPoint(initializedBlock);
+        // Prefix of the class type.
+        auto *classStart =
+            llvm::StructType::get(PtrTy, PtrTy, PtrTy, LongTy, LongTy);
+        auto &astContext = CGM.getContext();
+        auto flags = Builder.CreateLoad(
+            Address{Builder.CreateStructGEP(classStart, selfValue, 4), LongTy,
+                    CharUnits::fromQuantity(
+                        astContext.getTypeAlign(astContext.UnsignedLongTy))});
+        auto isInitialized = Builder.CreateAnd(flags, (1 << 8));
+        llvm::BasicBlock *notInitializedBlock =
+            CGF.createBasicBlock("objc_direct_method.send_initialize");
+        llvm::BasicBlock *initializedBlock =
+            CGF.createBasicBlock("objc_direct_method.class_initialized");
+        llvm::MDBuilder MDHelper(CGM.getLLVMContext());
+        Builder.CreateCondBr(Builder.CreateICmpEQ(isInitialized, Zeros[0]),
+                             notInitializedBlock, initializedBlock,
+                             MDHelper.createBranchWeights(1, 1 << 20));
+        CGF.EmitBlock(notInitializedBlock);
+        Builder.SetInsertPoint(notInitializedBlock);
+        CGF.EmitRuntimeCall(SentInitializeFn, selfValue);
+        Builder.CreateBr(initializedBlock);
+        CGF.EmitBlock(initializedBlock);
+        Builder.SetInsertPoint(initializedBlock);
       }
 
       // only synthesize _cmd if it's referenced
       if (OMD->getCmdDecl()->isUsed()) {
-      // `_cmd` is not a parameter to direct methods, so storage must be
-      // explicitly declared for it.
-      CGF.EmitVarDecl(*OMD->getCmdDecl());
-      Builder.CreateStore(GetSelector(CGF, OMD),
-                          CGF.GetAddrOfLocalVar(OMD->getCmdDecl()));
+        // `_cmd` is not a parameter to direct methods, so storage must be
+        // explicitly declared for it.
+        CGF.EmitVarDecl(*OMD->getCmdDecl());
+        Builder.CreateStore(GetSelector(CGF, OMD),
+                            CGF.GetAddrOfLocalVar(OMD->getCmdDecl()));
       }
     }
 };
@@ -4053,7 +4053,7 @@ llvm::Function *CGObjCGNU::GenerateMethod(const ObjCMethodDecl *OMD,
     // If these do not match, then we'll replace this function with
     // a new one that has the proper type below.
     if (!OMD->getBody() || COMD->getReturnType() == OMD->getReturnType())
-       return I->second;
+      return I->second;
     OldFn = I->second;
   }
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/78030


More information about the cfe-commits mailing list