Author: Lukacma
Date: 2026-10-07T12:25:51+01:00
New Revision: 21ea23e825432d183ceb43ff74cd1c08a26faf57

URL: 
https://github.com/llvm/llvm-project/commit/21ea23e825432d183ceb43ff74cd1c08a26faf57
DIFF: 
https://github.com/llvm/llvm-project/commit/21ea23e825432d183ceb43ff74cd1c08a26faf57.diff

LOG: [AArch64][FMV] Skip unreachable versions before emitting feature checks 
(#229120)

Currently there are checks emitted for unreachable features whose
results are then ignored. This results in a lot of unnecessary IR being
emitted. This patch removes that code, by moving the check for
unreachable version to the top of the loop.

Added: 
    

Modified: 
    clang/lib/CodeGen/CodeGenFunction.cpp
    clang/test/CodeGen/AArch64/fmv-unreachable-version.c

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/CodeGenFunction.cpp 
b/clang/lib/CodeGen/CodeGenFunction.cpp
index 62dade6cf6f49..72a5808cb6229 100644
--- a/clang/lib/CodeGen/CodeGenFunction.cpp
+++ b/clang/lib/CodeGen/CodeGenFunction.cpp
@@ -3229,6 +3229,10 @@ void CodeGenFunction::EmitAArch64MultiVersionResolver(
   llvm::BasicBlock *CurBlock = createBasicBlock("resolver_entry", Resolver);
 
   for (const FMVResolverOption &RO : Options) {
+    // Skip unreachable versions.
+    if (RO.Function == nullptr)
+      continue;
+
     Builder.SetInsertPoint(CurBlock);
     llvm::Value *Condition = FormAArch64ResolverCondition(RO);
 
@@ -3246,10 +3250,6 @@ void CodeGenFunction::EmitAArch64MultiVersionResolver(
       Builder.SetInsertPoint(CurBlock);
     }
 
-    // Skip unreachable versions.
-    if (RO.Function == nullptr)
-      continue;
-
     llvm::BasicBlock *RetBlock = createBasicBlock("resolver_return", Resolver);
     CGBuilderTy RetBuilder(CGM, RetBlock);
     CreateMultiVersionResolverReturn(CGM, Resolver, RetBuilder, RO.Function,

diff  --git a/clang/test/CodeGen/AArch64/fmv-unreachable-version.c 
b/clang/test/CodeGen/AArch64/fmv-unreachable-version.c
index ffb3cb986913f..ca6ce76929713 100644
--- a/clang/test/CodeGen/AArch64/fmv-unreachable-version.c
+++ b/clang/test/CodeGen/AArch64/fmv-unreachable-version.c
@@ -56,25 +56,13 @@ __attribute__((target_clones("sve2;priority=4", 
"aes+sve2;priority=3", "lse;prio
 // CHECK-NEXT:    ret ptr @unreachable_versions._Msve
 // CHECK:       resolver_else:
 // CHECK-NEXT:    [[TMP4:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
-// CHECK-NEXT:    [[TMP5:%.*]] = and i64 [[TMP4]], 69793284352
-// CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[TMP5]], 69793284352
+// CHECK-NEXT:    [[TMP5:%.*]] = and i64 [[TMP4]], 128
+// CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[TMP5]], 128
 // CHECK-NEXT:    [[TMP7:%.*]] = and i1 true, [[TMP6]]
-// CHECK-NEXT:    [[TMP8:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
-// CHECK-NEXT:    [[TMP9:%.*]] = and i64 [[TMP8]], 69793317632
-// CHECK-NEXT:    [[TMP10:%.*]] = icmp eq i64 [[TMP9]], 69793317632
-// CHECK-NEXT:    [[TMP11:%.*]] = and i1 true, [[TMP10]]
-// CHECK-NEXT:    [[TMP12:%.*]] = load i64, ptr @__aarch64_cpu_features, align 
8
-// CHECK-NEXT:    [[TMP13:%.*]] = and i64 [[TMP12]], 128
-// CHECK-NEXT:    [[TMP14:%.*]] = icmp eq i64 [[TMP13]], 128
-// CHECK-NEXT:    [[TMP15:%.*]] = and i1 true, [[TMP14]]
-// CHECK-NEXT:    br i1 [[TMP15]], label [[RESOLVER_RETURN1:%.*]], label 
[[RESOLVER_ELSE2:%.*]]
+// CHECK-NEXT:    br i1 [[TMP7]], label [[RESOLVER_RETURN1:%.*]], label 
[[RESOLVER_ELSE2:%.*]]
 // CHECK:       resolver_return1:
 // CHECK-NEXT:    ret ptr @unreachable_versions._Mlse
 // CHECK:       resolver_else2:
-// CHECK-NEXT:    [[TMP16:%.*]] = load i64, ptr @__aarch64_cpu_features, align 
8
-// CHECK-NEXT:    [[TMP17:%.*]] = and i64 [[TMP16]], 576460752303423616
-// CHECK-NEXT:    [[TMP18:%.*]] = icmp eq i64 [[TMP17]], 576460752303423616
-// CHECK-NEXT:    [[TMP19:%.*]] = and i1 true, [[TMP18]]
 // CHECK-NEXT:    ret ptr @unreachable_versions.default
 //
 //.


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to