[llvm] [FMV][GlobalOpt] Do not statically resolve non-FMV callers. (PR #123383)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 17 10:19:08 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Alexandros Lamprineas (labrinea)
<details>
<summary>Changes</summary>
This fixes a runtime regression in the llvm testsuite:
https://lab.llvm.org/buildbot/#/builders/198/builds/1237
On clang-aarch64-sve2-vla:
predres
FAIL
A 'predres' version is unexpectedly trapping on GravitonG4. My explanation is that when the caller in not a versioned function, the compiler exclusively relies on the command line option, or target attribute to deduce whether a feature is available. However, there is no guarantee that in reality the host supports those implied features.
---
Full diff: https://github.com/llvm/llvm-project/pull/123383.diff
2 Files Affected:
- (modified) llvm/lib/Transforms/IPO/GlobalOpt.cpp (+9-1)
- (modified) llvm/test/Transforms/GlobalOpt/resolve-fmv-ifunc.ll (+1-1)
``````````diff
diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
index bf0cacc6224be8..4e9cef97b670da 100644
--- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -2785,7 +2785,15 @@ static bool OptimizeNonTrivialIFuncs(
} else {
// We can't reason much about non-FMV callers. Just pick the highest
// priority callee if it matches, otherwise bail.
- if (I > 0 || !implies(CallerBits, CalleeBits))
+ //if (I > 0 || !implies(CallerBits, CalleeBits))
+ //
+ // FIXME: This is causing a regression in the llvm test suite,
+ // specifically a 'predres' version is unexpectedly trapping on
+ // GravitonG4. My explanation is that when the caller in not a
+ // versioned function, the compiler exclusively relies on the
+ // command line option, or target attribute to deduce whether a
+ // feature is available. However, there is no guarantee that in
+ // reality the host supports those implied features.
continue;
}
auto &Calls = CallSites[Caller];
diff --git a/llvm/test/Transforms/GlobalOpt/resolve-fmv-ifunc.ll b/llvm/test/Transforms/GlobalOpt/resolve-fmv-ifunc.ll
index 4b6a19d3f05cf5..fa817a8cbf417f 100644
--- a/llvm/test/Transforms/GlobalOpt/resolve-fmv-ifunc.ll
+++ b/llvm/test/Transforms/GlobalOpt/resolve-fmv-ifunc.ll
@@ -221,7 +221,7 @@ resolver_entry:
define i32 @caller4() #8 {
; CHECK-LABEL: define i32 @caller4(
; CHECK-SAME: ) local_unnamed_addr #[[ATTR7:[0-9]+]] {
-; CHECK: [[CALL:%.*]] = tail call i32 @test_non_fmv_caller._Maes()
+; CHECK: [[CALL:%.*]] = tail call i32 @test_non_fmv_caller()
;
entry:
%call = tail call i32 @test_non_fmv_caller()
``````````
</details>
https://github.com/llvm/llvm-project/pull/123383
More information about the llvm-commits
mailing list