diff options
Diffstat (limited to 'include/llvm/MC/MCInstrAnalysis.h')
-rw-r--r-- | include/llvm/MC/MCInstrAnalysis.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/include/llvm/MC/MCInstrAnalysis.h b/include/llvm/MC/MCInstrAnalysis.h index 484f03b4d854..e1673208d875 100644 --- a/include/llvm/MC/MCInstrAnalysis.h +++ b/include/llvm/MC/MCInstrAnalysis.h @@ -64,7 +64,7 @@ public: /// Returns true if at least one of the register writes performed by /// \param Inst implicitly clears the upper portion of all super-registers. - /// + /// /// Example: on X86-64, a write to EAX implicitly clears the upper half of /// RAX. Also (still on x86) an XMM write perfomed by an AVX 128-bit /// instruction implicitly clears the upper portion of the correspondent @@ -87,6 +87,19 @@ public: const MCInst &Inst, APInt &Writes) const; + /// Returns true if \param Inst is a dependency breaking instruction for the + /// given subtarget. + /// + /// The value computed by a dependency breaking instruction is not dependent + /// on the inputs. An example of dependency breaking instruction on X86 is + /// `XOR %eax, %eax`. + /// TODO: In future, we could implement an alternative approach where this + /// method returns `true` if the input instruction is not dependent on + /// some/all of its input operands. An APInt mask could then be used to + /// identify independent operands. + virtual bool isDependencyBreaking(const MCSubtargetInfo &STI, + const MCInst &Inst) const; + /// Given a branch instruction try to get the address the branch /// targets. Return true on success, and the address in Target. virtual bool |