aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenFunction.cpp
diff options
context:
space:
mode:
authorMitch Phillips <31459023+hctim@users.noreply.github.com>2022-12-20 17:16:32 -0800
committerMitch Phillips <31459023+hctim@users.noreply.github.com>2022-12-20 17:16:32 -0800
commit744486ec212773cfa3e08dd80b0fd8b279ff8faa (patch)
tree06791c6387a5e340be6ad908509e73d294bac489 /clang/lib/CodeGen/CodeGenFunction.cpp
parent74dd8c1bf80bbc415f8f6f45cb8f3f9bd83b3850 (diff)
downloadllvm-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.cpp88
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) {