[llvm-commits] [llvm] r42630 - /llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
Evan Cheng
evan.cheng at apple.com
Fri Oct 5 01:04:02 PDT 2007
Author: evancheng
Date: Fri Oct 5 03:04:01 2007
New Revision: 42630
URL: http://llvm.org/viewvc/llvm-project?rev=42630&view=rev
Log:
Testing convertToThreeeAddress as X86 llcbeta.
Modified:
llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=42630&r1=42629&r2=42630&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Fri Oct 5 03:04:01 2007
@@ -22,8 +22,15 @@
#include "llvm/CodeGen/LiveVariables.h"
#include "llvm/CodeGen/SSARegMap.h"
#include "llvm/Target/TargetOptions.h"
+#include "llvm/Support/CommandLine.h"
using namespace llvm;
+namespace {
+ cl::opt<bool>
+ EnableConvert3Addr("enable-x86-conv-3-addr",
+ cl::desc("Enable convertToThreeAddress for X86"));
+}
+
X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
: TargetInstrInfo(X86Insts, array_lengthof(X86Insts)),
TM(tm), RI(tm, *this) {
@@ -144,6 +151,21 @@
return true;
}
+/// hasLiveCondCodeDef - True if MI has a condition code def, e.g. EFLAGS, that
+/// is not marked dead.
+static bool hasLiveCondCodeDef(MachineInstr *MI) {
+ if (!EnableConvert3Addr)
+ return true;
+ for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
+ MachineOperand &MO = MI->getOperand(i);
+ if (MO.isRegister() && MO.isDef() &&
+ MO.getReg() == X86::EFLAGS && !MO.isDead()) {
+ return true;
+ }
+ }
+ return false;
+}
+
/// convertToThreeAddress - This method must be implemented by targets that
/// set the M_CONVERTIBLE_TO_3_ADDR flag. When this flag is set, the target
/// may be able to convert a two-address instruction into a true
@@ -169,7 +191,7 @@
bool DisableLEA16 = true;
switch (MI->getOpcode()) {
- default: return 0;
+ default: break; // All others need to check for live condition code defs.
case X86::SHUFPSrri: {
assert(MI->getNumOperands() == 4 && "Unknown shufps instruction!");
if (!TM.getSubtarget<X86Subtarget>().hasSSE2()) return 0;
@@ -253,10 +275,7 @@
}
}
- // FIXME: None of these instructions are promotable to LEAs without
- // additional information. In particular, LEA doesn't set the flags that
- // add and inc do. :(
- if (0)
+ if (!hasLiveCondCodeDef(MI))
switch (MI->getOpcode()) {
case X86::INC32r:
case X86::INC64_32r:
More information about the llvm-commits
mailing list