diff options
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 546beae..4778141 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -2761,8 +2761,14 @@ 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)) + // Optimize the Function Multi Versioning resolver by creating conditions + // only for features that are not enabled in the target. The exception is + // for features whose extension instructions are executed as NOP on targets + // without extension support. + if (!getContext().getTargetInfo().hasFeature(Feature) || + Feature.equals("bti") || Feature.equals("memtag") || + Feature.equals("memtag2") || Feature.equals("memtag3") || + Feature.equals("dgh")) CondFeatures.push_back(Feature); } if (!CondFeatures.empty()) { |