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;
 }
 


_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to