diff options
author | Mitch Phillips <31459023+hctim@users.noreply.github.com> | 2022-12-20 17:16:32 -0800 |
---|---|---|
committer | Mitch Phillips <31459023+hctim@users.noreply.github.com> | 2022-12-20 17:16:32 -0800 |
commit | 744486ec212773cfa3e08dd80b0fd8b279ff8faa (patch) | |
tree | 06791c6387a5e340be6ad908509e73d294bac489 /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | 74dd8c1bf80bbc415f8f6f45cb8f3f9bd83b3850 (diff) | |
download | llvm-744486ec212773cfa3e08dd80b0fd8b279ff8faa.zip llvm-744486ec212773cfa3e08dd80b0fd8b279ff8faa.tar.gz llvm-744486ec212773cfa3e08dd80b0fd8b279ff8faa.tar.bz2 |
Revert "[AArch64] FMV support and necessary target features dependencies."
This reverts commit e43924a75145d2f9e722f74b673145c3e62bfd07.
Reason: Patch broke the MSan buildbots. More information is available on
the original phabricator review: https://reviews.llvm.org/D127812
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 88 |
1 files changed, 5 insertions, 83 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 4125730..874a083 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -2627,22 +2627,8 @@ void CodeGenFunction::EmitKCFIOperandBundle( Bundles.emplace_back("kcfi", CGM.CreateKCFITypeId(FP->desugar())); } -llvm::Value *CodeGenFunction::FormAArch64ResolverCondition( - const MultiVersionResolverOption &RO) { - llvm::SmallVector<StringRef, 8> CondFeatures; - for (const StringRef &Feature : RO.Conditions.Features) { - // Form condition for features which are not yet enabled in target - if (!getContext().getTargetInfo().hasFeature(Feature)) - CondFeatures.push_back(Feature); - } - if (!CondFeatures.empty()) { - return EmitAArch64CpuSupports(CondFeatures); - } - return nullptr; -} - -llvm::Value *CodeGenFunction::FormX86ResolverCondition( - const MultiVersionResolverOption &RO) { +llvm::Value * +CodeGenFunction::FormResolverCondition(const MultiVersionResolverOption &RO) { llvm::Value *Condition = nullptr; if (!RO.Conditions.Architecture.empty()) @@ -2680,72 +2666,8 @@ static void CreateMultiVersionResolverReturn(CodeGenModule &CGM, void CodeGenFunction::EmitMultiVersionResolver( llvm::Function *Resolver, ArrayRef<MultiVersionResolverOption> Options) { - - llvm::Triple::ArchType ArchType = - getContext().getTargetInfo().getTriple().getArch(); - - switch (ArchType) { - case llvm::Triple::x86: - case llvm::Triple::x86_64: - EmitX86MultiVersionResolver(Resolver, Options); - return; - case llvm::Triple::aarch64: - EmitAArch64MultiVersionResolver(Resolver, Options); - return; - - default: - assert(false && "Only implemented for x86 and AArch64 targets"); - } -} - -void CodeGenFunction::EmitAArch64MultiVersionResolver( - llvm::Function *Resolver, ArrayRef<MultiVersionResolverOption> Options) { - assert(!Options.empty() && "No multiversion resolver options found"); - assert(Options.back().Conditions.Features.size() == 0 && - "Default case must be last"); - bool SupportsIFunc = getContext().getTargetInfo().supportsIFunc(); - assert(SupportsIFunc && - "Multiversion resolver requires target IFUNC support"); - bool AArch64CpuInitialized = false; - llvm::BasicBlock *CurBlock = createBasicBlock("resolver_entry", Resolver); - - for (const MultiVersionResolverOption &RO : Options) { - Builder.SetInsertPoint(CurBlock); - llvm::Value *Condition = FormAArch64ResolverCondition(RO); - - // The 'default' or 'all features enabled' case. - if (!Condition) { - CreateMultiVersionResolverReturn(CGM, Resolver, Builder, RO.Function, - SupportsIFunc); - return; - } - - if (!AArch64CpuInitialized) { - Builder.SetInsertPoint(CurBlock, CurBlock->begin()); - EmitAArch64CpuInit(); - AArch64CpuInitialized = true; - Builder.SetInsertPoint(CurBlock); - } - - llvm::BasicBlock *RetBlock = createBasicBlock("resolver_return", Resolver); - CGBuilderTy RetBuilder(*this, RetBlock); - CreateMultiVersionResolverReturn(CGM, Resolver, RetBuilder, RO.Function, - SupportsIFunc); - CurBlock = createBasicBlock("resolver_else", Resolver); - Builder.CreateCondBr(Condition, RetBlock, CurBlock); - } - - // If no default, emit an unreachable. - Builder.SetInsertPoint(CurBlock); - llvm::CallInst *TrapCall = EmitTrapCall(llvm::Intrinsic::trap); - TrapCall->setDoesNotReturn(); - TrapCall->setDoesNotThrow(); - Builder.CreateUnreachable(); - Builder.ClearInsertionPoint(); -} - -void CodeGenFunction::EmitX86MultiVersionResolver( - llvm::Function *Resolver, ArrayRef<MultiVersionResolverOption> Options) { + assert(getContext().getTargetInfo().getTriple().isX86() && + "Only implemented for x86 targets"); bool SupportsIFunc = getContext().getTargetInfo().supportsIFunc(); @@ -2756,7 +2678,7 @@ void CodeGenFunction::EmitX86MultiVersionResolver( for (const MultiVersionResolverOption &RO : Options) { Builder.SetInsertPoint(CurBlock); - llvm::Value *Condition = FormX86ResolverCondition(RO); + llvm::Value *Condition = FormResolverCondition(RO); // The 'default' or 'generic' case. if (!Condition) { |