This revision was automatically updated to reflect the committed changes. Closed by commit rG0ace0100aec3: [clang] NFC: Simplify the interface to CodeGenModule… (authored by tahonermann).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D122956/new/ https://reviews.llvm.org/D122956 Files: clang/lib/CodeGen/CodeGenModule.cpp clang/lib/CodeGen/CodeGenModule.h
Index: clang/lib/CodeGen/CodeGenModule.h =================================================================== --- clang/lib/CodeGen/CodeGenModule.h +++ clang/lib/CodeGen/CodeGenModule.h @@ -1472,9 +1472,7 @@ // the resolver symbol for the provided declaration. The value returned // will be for an ifunc (llvm::GlobalIFunc) if the current target supports // that feature and for a regular function (llvm::GlobalValue) otherwise. - llvm::Constant *GetOrCreateMultiVersionResolver(GlobalDecl GD, - llvm::Type *DeclTy, - const FunctionDecl *FD); + llvm::Constant *GetOrCreateMultiVersionResolver(GlobalDecl GD); // In scenarios where a function is not known to be a multiversion function // until a later declaration, it is sometimes necessary to change the Index: clang/lib/CodeGen/CodeGenModule.cpp =================================================================== --- clang/lib/CodeGen/CodeGenModule.cpp +++ clang/lib/CodeGen/CodeGenModule.cpp @@ -3414,22 +3414,12 @@ const auto *TC = FD->getAttr<TargetClonesAttr>(); assert(TC && "Not a target_clones Function?"); - QualType CanonTy = Context.getCanonicalType(FD->getType()); - llvm::Type *DeclTy = getTypes().ConvertType(CanonTy); - - if (const auto *CXXFD = dyn_cast<CXXMethodDecl>(FD)) { - const CGFunctionInfo &FInfo = getTypes().arrangeCXXMethodDeclaration(CXXFD); - DeclTy = getTypes().GetFunctionType(FInfo); - } - llvm::Function *ResolverFunc; if (getTarget().supportsIFunc()) { - auto *IFunc = cast<llvm::GlobalIFunc>( - GetOrCreateMultiVersionResolver(GD, DeclTy, FD)); + auto *IFunc = cast<llvm::GlobalIFunc>(GetOrCreateMultiVersionResolver(GD)); ResolverFunc = cast<llvm::Function>(IFunc->getResolver()); } else - ResolverFunc = - cast<llvm::Function>(GetOrCreateMultiVersionResolver(GD, DeclTy, FD)); + ResolverFunc = cast<llvm::Function>(GetOrCreateMultiVersionResolver(GD)); SmallVector<CodeGenFunction::MultiVersionResolverOption, 10> Options; for (unsigned VersionIndex = 0; VersionIndex < TC->featuresStrs_size(); @@ -3545,12 +3535,9 @@ assert(FD->isCPUDispatchMultiVersion() && "Not a multiversion function?"); const auto *DD = FD->getAttr<CPUDispatchAttr>(); assert(DD && "Not a cpu_dispatch Function?"); - llvm::Type *DeclTy = getTypes().ConvertType(FD->getType()); - if (const auto *CXXFD = dyn_cast<CXXMethodDecl>(FD)) { - const CGFunctionInfo &FInfo = getTypes().arrangeCXXMethodDeclaration(CXXFD); - DeclTy = getTypes().GetFunctionType(FInfo); - } + const CGFunctionInfo &FI = getTypes().arrangeGlobalDeclaration(GD); + llvm::FunctionType *DeclTy = getTypes().GetFunctionType(FI); StringRef ResolverName = getMangledName(GD); UpdateMultiVersionNames(GD, FD, ResolverName); @@ -3640,8 +3627,7 @@ if (getTarget().supportsIFunc()) { llvm::GlobalValue::LinkageTypes Linkage = getMultiversionLinkage(*this, GD); - auto *IFunc = cast<llvm::GlobalValue>( - GetOrCreateMultiVersionResolver(GD, DeclTy, FD)); + auto *IFunc = cast<llvm::GlobalValue>(GetOrCreateMultiVersionResolver(GD)); // Fix up function declarations that were created for cpu_specific before // cpu_dispatch was known @@ -3668,8 +3654,10 @@ /// If a dispatcher for the specified mangled name is not in the module, create /// and return an llvm Function with the specified type. -llvm::Constant *CodeGenModule::GetOrCreateMultiVersionResolver( - GlobalDecl GD, llvm::Type *DeclTy, const FunctionDecl *FD) { +llvm::Constant *CodeGenModule::GetOrCreateMultiVersionResolver(GlobalDecl GD) { + const auto *FD = cast<FunctionDecl>(GD.getDecl()); + assert(FD && "Not a FunctionDecl?"); + std::string MangledName = getMangledNameImpl(*this, GD, FD, /*OmitMultiVersionMangling=*/true); @@ -3685,6 +3673,9 @@ if (llvm::GlobalValue *ResolverGV = GetGlobalValue(ResolverName)) return ResolverGV; + const CGFunctionInfo &FI = getTypes().arrangeGlobalDeclaration(GD); + llvm::FunctionType *DeclTy = getTypes().GetFunctionType(FI); + // Since this is the first time we've created this IFunc, make sure // that we put this multiversioned function into the list to be // replaced later if necessary (target multiversioning only). @@ -3770,7 +3761,7 @@ if (FD->isMultiVersion()) { UpdateMultiVersionNames(GD, FD, MangledName); if (!IsForDefinition) - return GetOrCreateMultiVersionResolver(GD, Ty, FD); + return GetOrCreateMultiVersionResolver(GD); } }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits