[X86FixupSetCC] Use MachineInstr::readRegister/definesRegister to check for EFLAGS...
authorCraig Topper <craig.topper@gmail.com>
Wed, 25 Dec 2019 03:22:55 +0000 (19:22 -0800)
committerCraig Topper <craig.topper@gmail.com>
Wed, 25 Dec 2019 04:34:33 +0000 (20:34 -0800)
llvm/lib/Target/X86/X86FixupSetCC.cpp

index 09fa0e4..8ecdce4 100644 (file)
@@ -47,9 +47,6 @@ private:
   MachineInstr *findFlagsImpDef(MachineBasicBlock *MBB,
                                 MachineBasicBlock::reverse_iterator MI);
 
-  // Return true if MI imp-uses eflags.
-  bool impUsesFlags(MachineInstr *MI);
-
   // Return true if this is the opcode of a SetCC instruction with a register
   // output.
   bool isSetCCr(unsigned Opode);
@@ -77,21 +74,12 @@ X86FixupSetCCPass::findFlagsImpDef(MachineBasicBlock *MBB,
   // FIXME: Should this be instr_rend(), and MI be reverse_instr_iterator?
   auto MBBStart = MBB->rend();
   for (int i = 0; (i < SearchBound) && (MI != MBBStart); ++i, ++MI)
-    for (auto &Op : MI->implicit_operands())
-      if (Op.isReg() && (Op.getReg() == X86::EFLAGS) && Op.isDef())
-        return &*MI;
+    if (MI->definesRegister(X86::EFLAGS))
+      return &*MI;
 
   return nullptr;
 }
 
-bool X86FixupSetCCPass::impUsesFlags(MachineInstr *MI) {
-  for (auto &Op : MI->implicit_operands())
-    if (Op.isReg() && (Op.getReg() == X86::EFLAGS) && Op.isUse())
-      return true;
-
-  return false;
-}
-
 bool X86FixupSetCCPass::runOnMachineFunction(MachineFunction &MF) {
   bool Changed = false;
   MRI = &MF.getRegInfo();
@@ -126,7 +114,7 @@ bool X86FixupSetCCPass::runOnMachineFunction(MachineFunction &MF) {
       // it, itself, by definition, clobbers eflags. But it may happen that
       // FlagsDefMI also *uses* eflags, in which case the transformation is
       // invalid.
-      if (impUsesFlags(FlagsDefMI))
+      if (FlagsDefMI->readsRegister(X86::EFLAGS))
         continue;
 
       ++NumSubstZexts;