[llvm-branch-commits] [BOLT][NFC] Define getExprValue helper (PR #91663)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu May 9 14:45:16 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-bolt
Author: Amir Ayupov (aaupov)
<details>
<summary>Changes</summary>
Move out common code extracting the address of a MCExpr. To be reused in
a follow-up diff.
Test Plan: NFC
---
Full diff: https://github.com/llvm/llvm-project/pull/91663.diff
1 Files Affected:
- (modified) bolt/lib/Core/BinaryFunction.cpp (+10-6)
``````````diff
diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp
index de34421ebeb08..11103f7bdce8b 100644
--- a/bolt/lib/Core/BinaryFunction.cpp
+++ b/bolt/lib/Core/BinaryFunction.cpp
@@ -851,15 +851,19 @@ BinaryFunction::processIndirectBranch(MCInst &Instruction, unsigned Size,
return IndirectBranchType::UNKNOWN;
}
- // RIP-relative addressing should be converted to symbol form by now
- // in processed instructions (but not in jump).
- if (DispExpr) {
+ auto getExprValue = [&](const MCExpr *Expr) {
const MCSymbol *TargetSym;
uint64_t TargetOffset;
- std::tie(TargetSym, TargetOffset) = BC.MIB->getTargetSymbolInfo(DispExpr);
+ std::tie(TargetSym, TargetOffset) = BC.MIB->getTargetSymbolInfo(Expr);
ErrorOr<uint64_t> SymValueOrError = BC.getSymbolValue(*TargetSym);
- assert(SymValueOrError && "global symbol needs a value");
- ArrayStart = *SymValueOrError + TargetOffset;
+ assert(SymValueOrError && "Global symbol needs a value");
+ return *SymValueOrError + TargetOffset;
+ };
+
+ // RIP-relative addressing should be converted to symbol form by now
+ // in processed instructions (but not in jump).
+ if (DispExpr) {
+ ArrayStart = getExprValue(DispExpr);
BaseRegNum = BC.MIB->getNoRegister();
if (BC.isAArch64()) {
ArrayStart &= ~0xFFFULL;
``````````
</details>
https://github.com/llvm/llvm-project/pull/91663
More information about the llvm-branch-commits
mailing list