mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2026-07-19 15:13:37 -04:00
Implementation of asm-goto support in LLVM
This patch accompanies the RFC posted here: http://lists.llvm.org/pipermail/llvm-dev/2018-October/127239.html This patch adds a new CallBr IR instruction to support asm-goto inline assembly like gcc as used by the linux kernel. This instruction is both a call instruction and a terminator instruction with multiple successors. Only inline assembly usage is supported today. This also adds a new INLINEASM_BR opcode to SelectionDAG and MachineIR to represent an INLINEASM block that is also considered a terminator instruction. There will likely be more bug fixes and optimizations to follow this, but we felt it had reached a point where we would like to switch to an incremental development model. Patch by Craig Topper, Alexander Ivchenko, Mikhail Dvoretckii Differential Revision: https://reviews.llvm.org/D53765 llvm-svn: 353563
This commit is contained in:
@@ -414,10 +414,8 @@ ValueEnumerator::ValueEnumerator(const Module &M,
|
||||
EnumerateMetadata(&F, MD->getMetadata());
|
||||
}
|
||||
EnumerateType(I.getType());
|
||||
if (const CallInst *CI = dyn_cast<CallInst>(&I))
|
||||
EnumerateAttributes(CI->getAttributes());
|
||||
else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I))
|
||||
EnumerateAttributes(II->getAttributes());
|
||||
if (const auto *Call = dyn_cast<CallBase>(&I))
|
||||
EnumerateAttributes(Call->getAttributes());
|
||||
|
||||
// Enumerate metadata attached with this instruction.
|
||||
MDs.clear();
|
||||
|
||||
Reference in New Issue
Block a user