[llvm] r357808 - [X86] Preserve operand flag when expanding TCRETURNri
Francis Visoiu Mistrih via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 5 13:18:22 PDT 2019
Author: thegameg
Date: Fri Apr 5 13:18:21 2019
New Revision: 357808
URL: http://llvm.org/viewvc/llvm-project?rev=357808&view=rev
Log:
[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`.
Added:
llvm/trunk/test/CodeGen/X86/tailcall-pseudo-64.mir
llvm/trunk/test/CodeGen/X86/tailcall-pseudo.mir
Modified:
llvm/trunk/lib/Target/X86/X86.h
llvm/trunk/lib/Target/X86/X86ExpandPseudo.cpp
llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
Modified: llvm/trunk/lib/Target/X86/X86.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86.h?rev=357808&r1=357807&r2=357808&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86.h (original)
+++ llvm/trunk/lib/Target/X86/X86.h Fri Apr 5 13:18:21 2019
@@ -136,6 +136,7 @@ void initializeWinEHStatePassPass(PassRe
void initializeX86AvoidSFBPassPass(PassRegistry &);
void initializeX86CallFrameOptimizationPass(PassRegistry &);
void initializeX86CmovConverterPassPass(PassRegistry &);
+void initializeX86ExpandPseudoPass(PassRegistry&);
void initializeX86CondBrFoldingPassPass(PassRegistry &);
void initializeX86DomainReassignmentPass(PassRegistry &);
void initializeX86ExecutionDomainFixPass(PassRegistry &);
Modified: llvm/trunk/lib/Target/X86/X86ExpandPseudo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ExpandPseudo.cpp?rev=357808&r1=357807&r2=357808&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ExpandPseudo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ExpandPseudo.cpp Fri Apr 5 13:18:21 2019
@@ -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(MachineBa
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);
Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=357808&r1=357807&r2=357808&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Fri Apr 5 13:18:21 2019
@@ -71,6 +71,7 @@ extern "C" void LLVMInitializeX86Target(
initializeFixupLEAPassPass(PR);
initializeX86CallFrameOptimizationPass(PR);
initializeX86CmovConverterPassPass(PR);
+ initializeX86ExpandPseudoPass(PR);
initializeX86ExecutionDomainFixPass(PR);
initializeX86DomainReassignmentPass(PR);
initializeX86AvoidSFBPassPass(PR);
Added: llvm/trunk/test/CodeGen/X86/tailcall-pseudo-64.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tailcall-pseudo-64.mir?rev=357808&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/tailcall-pseudo-64.mir (added)
+++ llvm/trunk/test/CodeGen/X86/tailcall-pseudo-64.mir Fri Apr 5 13:18:21 2019
@@ -0,0 +1,10 @@
+#RUN: llc -verify-machineinstrs -mtriple=x86_64-apple-darwin -o - -run-pass=x86-pseudo %s | FileCheck %s
+---
+name: tail_call_fail_64
+tracksRegLiveness: true
+body: |
+ bb.0:
+ TCRETURNri64 undef renamable $rax, 0, csr_64, implicit $rsp, implicit $ssp
+ ; CHECK: TAILJMPr64 killed undef renamable $rax, csr_64, implicit $rsp, implicit $ssp
+
+...
Added: llvm/trunk/test/CodeGen/X86/tailcall-pseudo.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tailcall-pseudo.mir?rev=357808&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/tailcall-pseudo.mir (added)
+++ llvm/trunk/test/CodeGen/X86/tailcall-pseudo.mir Fri Apr 5 13:18:21 2019
@@ -0,0 +1,10 @@
+#RUN: llc -verify-machineinstrs -mtriple=i386-apple-darwin -o - -run-pass=x86-pseudo %s | FileCheck %s
+---
+name: tail_call_fail
+tracksRegLiveness: true
+body: |
+ bb.0:
+ TCRETURNri undef renamable $eax, 0, csr_32, implicit $esp, implicit $ssp
+ ; CHECK: TAILJMPr killed undef renamable $eax, csr_32, implicit $esp, implicit $ssp
+
+...
More information about the llvm-commits
mailing list