diff options
| author | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-04-05 20:18:21 +0000 |
|---|---|---|
| committer | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-04-05 20:18:21 +0000 |
| commit | ab051a378c9c84314c3b613cc37d9c424036d481 (patch) | |
| tree | d85df4acbf3f18884d693b23d1d5ffb40b9c00a8 /llvm/lib/Target/X86/X86ExpandPseudo.cpp | |
| parent | 3db6ad2bcfc5fb38343cfd7ce6eb56d9415e2b1e (diff) | |
| download | bcm5719-llvm-ab051a378c9c84314c3b613cc37d9c424036d481.tar.gz bcm5719-llvm-ab051a378c9c84314c3b613cc37d9c424036d481.zip | |
[X86] Preserve operand flag when expanding TCRETURNri
The expansion of TCRETURNri(64) would not keep operand flags like
undef/renamable/etc. which can result in machine verifier issues.
Also add plumbing to be able to use `-run-pass=x86-pseudo`.
llvm-svn: 357808
Diffstat (limited to 'llvm/lib/Target/X86/X86ExpandPseudo.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86ExpandPseudo.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86ExpandPseudo.cpp b/llvm/lib/Target/X86/X86ExpandPseudo.cpp index f587dd61629..99d4ce64427 100644 --- a/llvm/lib/Target/X86/X86ExpandPseudo.cpp +++ b/llvm/lib/Target/X86/X86ExpandPseudo.cpp @@ -26,6 +26,7 @@ using namespace llvm; #define DEBUG_TYPE "x86-pseudo" +#define X86_EXPAND_PSEUDO_NAME "X86 pseudo instruction expansion pass" namespace { class X86ExpandPseudo : public MachineFunctionPass { @@ -65,8 +66,12 @@ private: bool ExpandMBB(MachineBasicBlock &MBB); }; char X86ExpandPseudo::ID = 0; + } // End anonymous namespace. +INITIALIZE_PASS(X86ExpandPseudo, DEBUG_TYPE, X86_EXPAND_PSEUDO_NAME, false, + false) + void X86ExpandPseudo::ExpandICallBranchFunnel( MachineBasicBlock *MBB, MachineBasicBlock::iterator MBBI) { MachineBasicBlock *JTMBB = MBB; @@ -253,12 +258,14 @@ bool X86ExpandPseudo::ExpandMI(MachineBasicBlock &MBB, for (unsigned i = 0; i != 5; ++i) MIB.add(MBBI->getOperand(i)); } else if (Opcode == X86::TCRETURNri64) { + JumpTarget.setIsKill(); BuildMI(MBB, MBBI, DL, TII->get(IsWin64 ? X86::TAILJMPr64_REX : X86::TAILJMPr64)) - .addReg(JumpTarget.getReg(), RegState::Kill); + .add(JumpTarget); } else { + JumpTarget.setIsKill(); BuildMI(MBB, MBBI, DL, TII->get(X86::TAILJMPr)) - .addReg(JumpTarget.getReg(), RegState::Kill); + .add(JumpTarget); } MachineInstr &NewMI = *std::prev(MBBI); |

