[llvm-commits] [llvm] r37960 - in /llvm/trunk/lib/Target: TargetInstrInfo.cpp X86/X86InstrInfo.cpp

Evan Cheng evan.cheng at apple.com
Fri Jul 6 16:22:03 PDT 2007


Author: evancheng
Date: Fri Jul  6 18:22:03 2007
New Revision: 37960

URL: http://llvm.org/viewvc/llvm-project?rev=37960&view=rev
Log:
isUnpredicatedTerminator should treat conditional branches as unpredicated terminator.

Modified:
    llvm/trunk/lib/Target/TargetInstrInfo.cpp
    llvm/trunk/lib/Target/X86/X86InstrInfo.cpp

Modified: llvm/trunk/lib/Target/TargetInstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetInstrInfo.cpp?rev=37960&r1=37959&r2=37960&view=diff

==============================================================================
--- llvm/trunk/lib/Target/TargetInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetInstrInfo.cpp Fri Jul  6 18:22:03 2007
@@ -88,9 +88,12 @@
 bool TargetInstrInfo::isUnpredicatedTerminator(const MachineInstr *MI) const {
   const TargetInstrDescriptor *TID = MI->getInstrDescriptor();
   if (TID->Flags & M_TERMINATOR_FLAG) {
+    // Conditional branch is a special case.
+    if ((TID->Flags & M_BRANCH_FLAG) != 0 && (TID->Flags & M_BARRIER_FLAG) == 0)
+      return true;
     if ((TID->Flags & M_PREDICABLE) == 0)
       return true;
     return !isPredicated(MI);
-}
+  }
   return false;
 }

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=37960&r1=37959&r2=37960&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Fri Jul  6 18:22:03 2007
@@ -404,11 +404,18 @@
 
 // For purposes of branch analysis do not count FP_REG_KILL as a terminator.
 bool X86InstrInfo::isUnpredicatedTerminator(const MachineInstr *MI) const {
-  const TargetInstrDescriptor *TID = MI->getInstrDescriptor();
   if (MI->getOpcode() == X86::FP_REG_KILL)
     return false;
-  if (TID->Flags & M_TERMINATOR_FLAG)
+
+  const TargetInstrDescriptor *TID = MI->getInstrDescriptor();
+  if (TID->Flags & M_TERMINATOR_FLAG) {
+    // Conditional branch is a special case.
+    if ((TID->Flags & M_BRANCH_FLAG) != 0 && (TID->Flags & M_BARRIER_FLAG) == 0)
+      return true;
+    if ((TID->Flags & M_PREDICABLE) == 0)
+      return true;
     return !isPredicated(MI);
+  }
   return false;
 }
 





More information about the llvm-commits mailing list