diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86InsertWait.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86InsertWait.cpp | 21 |
1 files changed, 2 insertions, 19 deletions
diff --git a/llvm/lib/Target/X86/X86InsertWait.cpp b/llvm/lib/Target/X86/X86InsertWait.cpp index 56d2709f5937..69a3d32a9314 100644 --- a/llvm/lib/Target/X86/X86InsertWait.cpp +++ b/llvm/lib/Target/X86/X86InsertWait.cpp @@ -55,23 +55,6 @@ char WaitInsert::ID = 0; FunctionPass *llvm::createX86InsertX87waitPass() { return new WaitInsert(); } -/// Return true if the Reg is X87 register. -static bool isX87Reg(unsigned Reg) { - return (Reg == X86::FPCW || Reg == X86::FPSW || - (Reg >= X86::ST0 && Reg <= X86::ST7)); -} - -/// check if the instruction is X87 instruction -static bool isX87Instruction(MachineInstr &MI) { - for (const MachineOperand &MO : MI.operands()) { - if (!MO.isReg()) - continue; - if (isX87Reg(MO.getReg())) - return true; - } - return false; -} - static bool isX87ControlInstruction(MachineInstr &MI) { switch (MI.getOpcode()) { case X86::FNINIT: @@ -121,7 +104,7 @@ bool WaitInsert::runOnMachineFunction(MachineFunction &MF) { for (MachineBasicBlock &MBB : MF) { for (MachineBasicBlock::iterator MI = MBB.begin(); MI != MBB.end(); ++MI) { // Jump non X87 instruction. - if (!isX87Instruction(*MI)) + if (!X86::isX87Instruction(*MI)) continue; // If the instruction instruction neither has float exception nor is // a load/store instruction, or the instruction is x87 control @@ -132,7 +115,7 @@ bool WaitInsert::runOnMachineFunction(MachineFunction &MF) { // If the following instruction is an X87 instruction and isn't an X87 // non-waiting control instruction, we can omit insert wait instruction. MachineBasicBlock::iterator AfterMI = std::next(MI); - if (AfterMI != MBB.end() && isX87Instruction(*AfterMI) && + if (AfterMI != MBB.end() && X86::isX87Instruction(*AfterMI) && !isX87NonWaitingControlInstruction(*AfterMI)) continue; |
