[llvm-branch-commits] [lldb] Add DisassemblerLLVMC::IsBarrier API (PR #169632)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Nov 26 02:56:06 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Felipe de Azevedo Piovezan (felipepiovezan)
<details>
<summary>Changes</summary>
This will allow the instruction emulation unwinder to reason about
instructions that prevent the subsequent instruction from executing.
commit-id:bb5df4aa
---
Full diff: https://github.com/llvm/llvm-project/pull/169632.diff
3 Files Affected:
- (modified) lldb/include/lldb/Core/Disassembler.h (+4)
- (modified) lldb/source/Core/Disassembler.cpp (+5)
- (modified) lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp (+13)
``````````diff
diff --git a/lldb/include/lldb/Core/Disassembler.h b/lldb/include/lldb/Core/Disassembler.h
index 5de314109b0cc..ab0f4ac804a7c 100644
--- a/lldb/include/lldb/Core/Disassembler.h
+++ b/lldb/include/lldb/Core/Disassembler.h
@@ -167,6 +167,8 @@ class Instruction {
virtual bool IsLoad() = 0;
+ virtual bool IsBarrier() = 0;
+
virtual bool IsAuthenticated() = 0;
bool CanSetBreakpoint();
@@ -367,6 +369,8 @@ class PseudoInstruction : public Instruction {
bool IsLoad() override;
+ bool IsBarrier() override;
+
bool IsAuthenticated() override;
void CalculateMnemonicOperandsAndComment(
diff --git a/lldb/source/Core/Disassembler.cpp b/lldb/source/Core/Disassembler.cpp
index f2eb887986bfb..ed32caf361e0a 100644
--- a/lldb/source/Core/Disassembler.cpp
+++ b/lldb/source/Core/Disassembler.cpp
@@ -1341,6 +1341,11 @@ bool PseudoInstruction::DoesBranch() {
return false;
}
+bool PseudoInstruction::IsBarrier() {
+ // This is NOT a valid question for a pseudo instruction.
+ return false;
+}
+
bool PseudoInstruction::HasDelaySlot() {
// This is NOT a valid question for a pseudo instruction.
return false;
diff --git a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp
index 66d0a50985be7..e8bb706f7aab6 100644
--- a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp
+++ b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp
@@ -70,6 +70,7 @@ class DisassemblerLLVMC::MCDisasmInstance {
bool HasDelaySlot(llvm::MCInst &mc_inst) const;
bool IsCall(llvm::MCInst &mc_inst) const;
bool IsLoad(llvm::MCInst &mc_inst) const;
+ bool IsBarrier(llvm::MCInst &mc_inst) const;
bool IsAuthenticated(llvm::MCInst &mc_inst) const;
private:
@@ -436,6 +437,11 @@ class InstructionLLVMC : public lldb_private::Instruction {
return m_is_load;
}
+ bool IsBarrier() override {
+ VisitInstruction();
+ return m_is_barrier;
+ }
+
bool IsAuthenticated() override {
VisitInstruction();
return m_is_authenticated;
@@ -1195,6 +1201,7 @@ class InstructionLLVMC : public lldb_private::Instruction {
bool m_is_call = false;
bool m_is_load = false;
bool m_is_authenticated = false;
+ bool m_is_barrier = false;
void VisitInstruction() {
if (m_has_visited_instruction)
@@ -1227,6 +1234,7 @@ class InstructionLLVMC : public lldb_private::Instruction {
m_is_call = mc_disasm_ptr->IsCall(inst);
m_is_load = mc_disasm_ptr->IsLoad(inst);
m_is_authenticated = mc_disasm_ptr->IsAuthenticated(inst);
+ m_is_barrier = mc_disasm_ptr->IsBarrier(inst);
}
private:
@@ -1432,6 +1440,11 @@ bool DisassemblerLLVMC::MCDisasmInstance::IsLoad(llvm::MCInst &mc_inst) const {
return m_instr_info_up->get(mc_inst.getOpcode()).mayLoad();
}
+bool DisassemblerLLVMC::MCDisasmInstance::IsBarrier(
+ llvm::MCInst &mc_inst) const {
+ return m_instr_info_up->get(mc_inst.getOpcode()).isBarrier();
+}
+
bool DisassemblerLLVMC::MCDisasmInstance::IsAuthenticated(
llvm::MCInst &mc_inst) const {
const auto &InstrDesc = m_instr_info_up->get(mc_inst.getOpcode());
``````````
</details>
https://github.com/llvm/llvm-project/pull/169632
More information about the llvm-branch-commits
mailing list