[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.67 - 1.68 --- Log message: Match MachineFunction::UsedPhysRegs changes. --- Diffs of the changes: (+1 -2) X86FloatingPoint.cpp |3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.67 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.68 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.67 Tue Dec 19 16:59:26 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppWed Apr 25 17:13:27 2007 @@ -161,12 +161,11 @@ bool FPS::runOnMachineFunction(MachineFunction MF) { // We only need to run this pass if there are any FP registers used in this // function. If it is all integer, there is nothing for us to do! - const bool *PhysRegsUsed = MF.getUsedPhysregs(); bool FPIsUsed = false; assert(X86::FP6 == X86::FP0+6 Register enums aren't sorted right!); for (unsigned i = 0; i = 6; ++i) -if (PhysRegsUsed[X86::FP0+i]) { +if (MF.isPhysRegUsed(X86::FP0+i)) { FPIsUsed = true; break; } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp X86ISelDAGToDAG.cpp X86RegisterInfo.cpp X86Subtarget.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.64 - 1.65 X86ISelDAGToDAG.cpp updated: 1.137 - 1.138 X86RegisterInfo.cpp updated: 1.183 - 1.184 X86Subtarget.cpp updated: 1.42 - 1.43 --- Log message: What should be the last unnecessary iostreams in the library. --- Diffs of the changes: (+15 -20) X86FloatingPoint.cpp | 17 - X86ISelDAGToDAG.cpp |1 - X86RegisterInfo.cpp | 10 -- X86Subtarget.cpp |7 +++ 4 files changed, 15 insertions(+), 20 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.64 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.65 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.64 Wed Dec 6 11:46:32 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppThu Dec 7 16:21:48 2006 @@ -44,7 +44,6 @@ #include llvm/ADT/Statistic.h #include llvm/ADT/STLExtras.h #include algorithm -#include iostream #include set using namespace llvm; @@ -70,12 +69,12 @@ unsigned StackTop; // The current top of the FP stack. void dumpStack() const { - std::cerr Stack contents:; + cerr Stack contents:; for (unsigned i = 0; i != StackTop; ++i) { -std::cerr FP Stack[i]; +cerr FP Stack[i]; assert(RegMap[Stack[i]] == i Stack[] doesn't match RegMap[]!); } - std::cerr \n; + cerr \n; } private: // getSlot - Return the stack slot number a particular register number is @@ -211,7 +210,7 @@ PrevMI = prior(I); ++NumFP; // Keep track of # of pseudo instrs -DEBUG(std::cerr \nFPInst:\t; MI-print(std::cerr, (MF.getTarget(; +DOUT \nFPInst:\t; MI-print(*cerr.stream(), (MF.getTarget())); // Get dead variables list now because the MI pointer may be deleted as part // of processing! @@ -238,7 +237,7 @@ for (unsigned i = 0, e = DeadRegs.size(); i != e; ++i) { unsigned Reg = DeadRegs[i]; if (Reg = X86::FP0 Reg = X86::FP6) { -DEBUG(std::cerr Register FP# Reg-X86::FP0 is dead!\n); +DOUT Register FP# Reg-X86::FP0 is dead!\n; freeStackSlotAfter(I, Reg-X86::FP0); } } @@ -247,13 +246,13 @@ DEBUG( MachineBasicBlock::iterator PrevI(PrevMI); if (I == PrevI) { -std::cerr Just deleted pseudo instruction\n; +cerr Just deleted pseudo instruction\n; } else { MachineBasicBlock::iterator Start = I; // Rewind to first instruction newly inserted. while (Start != BB.begin() prior(Start) != PrevI) --Start; -std::cerr Inserted instructions:\n\t; -Start-print(std::cerr, MF.getTarget()); +cerr Inserted instructions:\n\t; +Start-print(*cerr.stream(), MF.getTarget()); while (++Start != next(I)); } dumpStack(); Index: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp diff -u llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.137 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.138 --- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.137 Wed Dec 6 11:46:32 2006 +++ llvm/lib/Target/X86/X86ISelDAGToDAG.cpp Thu Dec 7 16:21:48 2006 @@ -34,7 +34,6 @@ #include llvm/Support/Debug.h #include llvm/Support/MathExtras.h #include llvm/ADT/Statistic.h -#include iostream #include queue #include set using namespace llvm; Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.183 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.184 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.183 Wed Dec 6 19:21:59 2006 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Thu Dec 7 16:21:48 2006 @@ -32,8 +32,6 @@ #include llvm/Target/TargetOptions.h #include llvm/Support/CommandLine.h #include llvm/ADT/STLExtras.h -#include iostream - using namespace llvm; namespace { @@ -244,8 +242,8 @@ static bool TableIsSorted(const TableEntry *Table, unsigned NumEntries) { for (unsigned i = 1; i != NumEntries; ++i) if (!(Table[i-1] Table[i])) { - std::cerr Entries out of order Table[i-1].from -Table[i].from \n; + cerr Entries out of order Table[i-1].from + Table[i].from \n; return false; } return true; @@ -845,8 +843,8 @@ // No fusion if (PrintFailedFusing) -std::cerr We failed to fuse ( - ((i == 1) ? r : s) ): *MI; +cerr We failed to fuse ( + ((i == 1) ? r : s) ): *MI; return NULL; } Index: llvm/lib/Target/X86/X86Subtarget.cpp diff -u llvm/lib/Target/X86/X86Subtarget.cpp:1.42 llvm/lib/Target/X86/X86Subtarget.cpp:1.43 --- llvm/lib/Target/X86/X86Subtarget.cpp:1.42 Thu Nov 30 16:42:55 2006 +++ llvm/lib/Target/X86/X86Subtarget.cppThu Dec 7 16:21:48 2006 @@ -15,7 +15,6 @@ #include X86GenSubtarget.inc #include llvm/Module.h #include llvm/Support/CommandLine.h -#include iostream using namespace llvm; cl::optX86Subtarget::AsmWriterFlavorTy @@ -224,10
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.65 - 1.66 --- Log message: Fix a bug introduced by the streams patch. DEBUG code was made unconditional. --- Diffs of the changes: (+1 -1) X86FloatingPoint.cpp |2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.65 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.66 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.65 Thu Dec 7 16:21:48 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppThu Dec 7 23:41:26 2006 @@ -210,7 +210,7 @@ PrevMI = prior(I); ++NumFP; // Keep track of # of pseudo instrs -DOUT \nFPInst:\t; MI-print(*cerr.stream(), (MF.getTarget())); +DOUT \nFPInst:\t *MI; // Get dead variables list now because the MI pointer may be deleted as part // of processing! ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.62 - 1.63 --- Log message: Fix 2005-05-08-FPStackifierPHI.ll failure. --- Diffs of the changes: (+7 -26) X86FloatingPoint.cpp | 33 +++-- 1 files changed, 7 insertions(+), 26 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.62 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.63 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.62 Thu Nov 30 01:12:03 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppFri Dec 1 04:11:51 2006 @@ -62,11 +62,12 @@ MachineFunctionPass::getAnalysisUsage(AU); } private: -LiveVariables *LV;// Live variable info for current function... -MachineBasicBlock *MBB; // Current basic block -unsigned Stack[8];// FPn Registers in each stack slot... -unsigned RegMap[8]; // Track which stack slot contains each register -unsigned StackTop;// The current top of the FP stack. +const TargetInstrInfo *TII; // Machine instruction info. +LiveVariables *LV; // Live variable info for current function... +MachineBasicBlock *MBB; // Current basic block +unsigned Stack[8]; // FPn Registers in each stack slot... +unsigned RegMap[8]; // Track which stack slot contains each register +unsigned StackTop; // The current top of the FP stack. void dumpStack() const { std::cerr Stack contents:; @@ -107,9 +108,6 @@ bool isAtTop(unsigned RegNo) const { return getSlot(RegNo) == StackTop-1; } void moveToTop(unsigned RegNo, MachineBasicBlock::iterator I) { if (!isAtTop(RegNo)) { -MachineFunction *MF = I-getParent()-getParent(); -const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); - unsigned STReg = getSTReg(RegNo); unsigned RegOnTop = getStackEntry(0); @@ -127,8 +125,6 @@ } void duplicateToTop(unsigned RegNo, unsigned AsReg, MachineInstr *I) { - MachineFunction *MF = I-getParent()-getParent(); - const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); unsigned STReg = getSTReg(RegNo); pushReg(AsReg); // New register on top of stack @@ -179,6 +175,7 @@ // Early exit. if (!FPIsUsed) return false; + TII = MF.getTarget().getInstrInfo(); LV = getAnalysisLiveVariables(); StackTop = 0; @@ -431,8 +428,6 @@ assert(StackTop 0 Cannot pop empty stack!); RegMap[Stack[--StackTop]] = ~0; // Update state - MachineFunction *MF = I-getParent()-getParent(); - const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); // Check to see if there is a popping version of this instruction... int Opcode = Lookup(PopTable, ARRAY_SIZE(PopTable), I-getOpcode()); if (Opcode != -1) { @@ -464,8 +459,6 @@ RegMap[TopReg]= OldSlot; RegMap[FPRegNo] = ~0; Stack[--StackTop] = ~0; - MachineFunction *MF = I-getParent()-getParent(); - const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); I = BuildMI(*MBB, ++I, TII-get(X86::FSTPrr)).addReg(STReg); } @@ -486,8 +479,6 @@ /// void FPS::handleZeroArgFP(MachineBasicBlock::iterator I) { MachineInstr *MI = I; - MachineFunction *MF = MI-getParent()-getParent(); - const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); unsigned DestReg = getFPReg(MI-getOperand(0)); // Change from the pseudo instruction to the concrete instruction. @@ -528,8 +519,6 @@ // Convert from the pseudo instruction to the concrete instruction. MI-RemoveOperand(NumOps-1);// Remove explicit ST(0) operand - MachineFunction *MF = MI-getParent()-getParent(); - const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); MI-setInstrDescriptor(TII-get(getConcreteOpcode(MI-getOpcode(; if (MI-getOpcode() == X86::FISTP64m || @@ -575,8 +564,6 @@ } // Change from the pseudo instruction to the concrete instruction. - MachineFunction *MF = I-getParent()-getParent(); - const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); MI-RemoveOperand(1); // Drop the source operand. MI-RemoveOperand(0); // Drop the destination operand. MI-setInstrDescriptor(TII-get(getConcreteOpcode(MI-getOpcode(; @@ -704,8 +691,6 @@ // Replace the old instruction with a new instruction MBB-remove(I++); - MachineFunction *MF = MI-getParent()-getParent(); - const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); I = BuildMI(*MBB, I, TII-get(Opcode)).addReg(getSTReg(NotTOS)); // If both operands are killed, pop one off of the stack in addition to @@ -743,8 +728,6 @@ // anywhere. moveToTop(Op0, I); - MachineFunction *MF = I-getParent()-getParent(); - const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); // Change from the pseudo instruction to the concrete instruction. MI-getOperand(0).setReg(getSTReg(Op1)); MI-RemoveOperand(1); @@ -769,8 +752,6 @@ // The first operand
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.61 - 1.62 --- Log message: MachineInstr::setOpcode - MachineInstr::setInstrDescriptor --- Diffs of the changes: (+33 -31) X86FloatingPoint.cpp | 64 ++- 1 files changed, 33 insertions(+), 31 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.61 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.62 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.61 Mon Nov 27 17:37:22 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppThu Nov 30 01:12:03 2006 @@ -108,7 +108,7 @@ void moveToTop(unsigned RegNo, MachineBasicBlock::iterator I) { if (!isAtTop(RegNo)) { MachineFunction *MF = I-getParent()-getParent(); -const TargetInstrInfo TII = *MF-getTarget().getInstrInfo(); +const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); unsigned STReg = getSTReg(RegNo); unsigned RegOnTop = getStackEntry(0); @@ -121,18 +121,18 @@ std::swap(Stack[RegMap[RegOnTop]], Stack[StackTop-1]); // Emit an fxch to update the runtime processors version of the state -BuildMI(*MBB, I, TII.get(X86::FXCH)).addReg(STReg); +BuildMI(*MBB, I, TII-get(X86::FXCH)).addReg(STReg); NumFXCH++; } } void duplicateToTop(unsigned RegNo, unsigned AsReg, MachineInstr *I) { MachineFunction *MF = I-getParent()-getParent(); - const TargetInstrInfo TII = *MF-getTarget().getInstrInfo(); + const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); unsigned STReg = getSTReg(RegNo); pushReg(AsReg); // New register on top of stack - BuildMI(*MBB, I, TII.get(X86::FLDrr)).addReg(STReg); + BuildMI(*MBB, I, TII-get(X86::FLDrr)).addReg(STReg); } // popStackAfter - Pop the current value off of the top of the FP stack @@ -200,13 +200,12 @@ /// transforming FP instructions into their stack form. /// bool FPS::processBasicBlock(MachineFunction MF, MachineBasicBlock BB) { - const TargetInstrInfo TII = *MF.getTarget().getInstrInfo(); bool Changed = false; MBB = BB; for (MachineBasicBlock::iterator I = BB.begin(); I != BB.end(); ++I) { MachineInstr *MI = I; -unsigned Flags = TII.get(MI-getOpcode()).TSFlags; +unsigned Flags = MI-getInstrDescriptor()-TSFlags; if ((Flags X86II::FPTypeMask) == X86II::NotFP) continue; // Efficiently ignore non-fp insts! @@ -432,17 +431,16 @@ assert(StackTop 0 Cannot pop empty stack!); RegMap[Stack[--StackTop]] = ~0; // Update state + MachineFunction *MF = I-getParent()-getParent(); + const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); // Check to see if there is a popping version of this instruction... int Opcode = Lookup(PopTable, ARRAY_SIZE(PopTable), I-getOpcode()); if (Opcode != -1) { -I-setOpcode(Opcode); +I-setInstrDescriptor(TII-get(Opcode)); if (Opcode == X86::FUCOMPPr) I-RemoveOperand(0); - } else {// Insert an explicit pop -MachineFunction *MF = I-getParent()-getParent(); -const TargetInstrInfo TII = *MF-getTarget().getInstrInfo(); -I = BuildMI(*MBB, ++I, TII.get(X86::FSTPrr)).addReg(X86::ST0); +I = BuildMI(*MBB, ++I, TII-get(X86::FSTPrr)).addReg(X86::ST0); } } @@ -467,8 +465,8 @@ RegMap[FPRegNo] = ~0; Stack[--StackTop] = ~0; MachineFunction *MF = I-getParent()-getParent(); - const TargetInstrInfo TII = *MF-getTarget().getInstrInfo(); - I = BuildMI(*MBB, ++I, TII.get(X86::FSTPrr)).addReg(STReg); + const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); + I = BuildMI(*MBB, ++I, TII-get(X86::FSTPrr)).addReg(STReg); } @@ -488,11 +486,13 @@ /// void FPS::handleZeroArgFP(MachineBasicBlock::iterator I) { MachineInstr *MI = I; + MachineFunction *MF = MI-getParent()-getParent(); + const TargetInstrInfo *TII = MF-getTarget().getInstrInfo(); unsigned DestReg = getFPReg(MI-getOperand(0)); // Change from the pseudo instruction to the concrete instruction. MI-RemoveOperand(0); // Remove the explicit ST(0) operand - MI-setOpcode(getConcreteOpcode(MI-getOpcode())); + MI-setInstrDescriptor(TII-get(getConcreteOpcode(MI-getOpcode(; // Result gets pushed on the stack. pushReg(DestReg); @@ -502,9 +502,7 @@ /// void FPS::handleOneArgFP(MachineBasicBlock::iterator I) { MachineInstr *MI = I; - MachineFunction *MF = MI-getParent()-getParent(); - const TargetInstrInfo TII = *MF-getTarget().getInstrInfo(); - unsigned NumOps = TII.getNumOperands(MI-getOpcode()); + unsigned NumOps = MI-getInstrDescriptor()-numOperands; assert((NumOps == 5 || NumOps == 1) Can only handle fst* ftst instructions!); @@ -530,7 +528,9 @@ // Convert from the pseudo instruction to the concrete instruction. MI-RemoveOperand(NumOps-1);// Remove explicit ST(0) operand -
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp X86ISelDAGToDAG.cpp X86ISelLowering.cpp X86InstrInfo.cpp X86RegisterInfo.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.60 - 1.61 X86ISelDAGToDAG.cpp updated: 1.129 - 1.130 X86ISelLowering.cpp updated: 1.294 - 1.295 X86InstrInfo.cpp updated: 1.74 - 1.75 X86RegisterInfo.cpp updated: 1.180 - 1.181 --- Log message: Change MachineInstr ctor's to take a TargetInstrDescriptor reference instead of opcode and number of operands. --- Diffs of the changes: (+75 -61) X86FloatingPoint.cpp | 19 ++- X86ISelDAGToDAG.cpp | 19 ++- X86ISelLowering.cpp | 22 +- X86InstrInfo.cpp | 30 +++--- X86RegisterInfo.cpp | 46 +++--- 5 files changed, 75 insertions(+), 61 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.60 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.61 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.60 Wed Nov 15 14:56:39 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppMon Nov 27 17:37:22 2006 @@ -107,6 +107,9 @@ bool isAtTop(unsigned RegNo) const { return getSlot(RegNo) == StackTop-1; } void moveToTop(unsigned RegNo, MachineBasicBlock::iterator I) { if (!isAtTop(RegNo)) { +MachineFunction *MF = I-getParent()-getParent(); +const TargetInstrInfo TII = *MF-getTarget().getInstrInfo(); + unsigned STReg = getSTReg(RegNo); unsigned RegOnTop = getStackEntry(0); @@ -118,16 +121,18 @@ std::swap(Stack[RegMap[RegOnTop]], Stack[StackTop-1]); // Emit an fxch to update the runtime processors version of the state -BuildMI(*MBB, I, X86::FXCH, 1).addReg(STReg); +BuildMI(*MBB, I, TII.get(X86::FXCH)).addReg(STReg); NumFXCH++; } } void duplicateToTop(unsigned RegNo, unsigned AsReg, MachineInstr *I) { + MachineFunction *MF = I-getParent()-getParent(); + const TargetInstrInfo TII = *MF-getTarget().getInstrInfo(); unsigned STReg = getSTReg(RegNo); pushReg(AsReg); // New register on top of stack - BuildMI(*MBB, I, X86::FLDrr, 1).addReg(STReg); + BuildMI(*MBB, I, TII.get(X86::FLDrr)).addReg(STReg); } // popStackAfter - Pop the current value off of the top of the FP stack @@ -435,7 +440,9 @@ I-RemoveOperand(0); } else {// Insert an explicit pop -I = BuildMI(*MBB, ++I, X86::FSTPrr, 1).addReg(X86::ST0); +MachineFunction *MF = I-getParent()-getParent(); +const TargetInstrInfo TII = *MF-getTarget().getInstrInfo(); +I = BuildMI(*MBB, ++I, TII.get(X86::FSTPrr)).addReg(X86::ST0); } } @@ -459,7 +466,9 @@ RegMap[TopReg]= OldSlot; RegMap[FPRegNo] = ~0; Stack[--StackTop] = ~0; - I = BuildMI(*MBB, ++I, X86::FSTPrr, 1).addReg(STReg); + MachineFunction *MF = I-getParent()-getParent(); + const TargetInstrInfo TII = *MF-getTarget().getInstrInfo(); + I = BuildMI(*MBB, ++I, TII.get(X86::FSTPrr)).addReg(STReg); } @@ -697,7 +706,7 @@ // Replace the old instruction with a new instruction MBB-remove(I++); - I = BuildMI(*MBB, I, Opcode, 1).addReg(getSTReg(NotTOS)); + I = BuildMI(*MBB, I, TII.get(Opcode)).addReg(getSTReg(NotTOS)); // If both operands are killed, pop one off of the stack in addition to // overwriting the other one. Index: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp diff -u llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.129 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.130 --- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.129 Fri Nov 17 16:10:14 2006 +++ llvm/lib/Target/X86/X86ISelDAGToDAG.cpp Mon Nov 27 17:37:22 2006 @@ -525,7 +525,8 @@ // Finally, if we found any FP code, emit the FP_REG_KILL instruction. if (ContainsFPCode) { - BuildMI(*BB, BB-getFirstTerminator(), X86::FP_REG_KILL, 0); + BuildMI(*BB, BB-getFirstTerminator(), + TM.getInstrInfo()-get(X86::FP_REG_KILL)); ++NumFPKill; } } @@ -535,19 +536,20 @@ /// the main function. void X86DAGToDAGISel::EmitSpecialCodeForMain(MachineBasicBlock *BB, MachineFrameInfo *MFI) { + const TargetInstrInfo *TII = TM.getInstrInfo(); if (Subtarget-isTargetCygwin()) -BuildMI(BB, X86::CALLpcrel32, 1).addExternalSymbol(__main); +BuildMI(BB, TII-get(X86::CALLpcrel32)).addExternalSymbol(__main); // Switch the FPU to 64-bit precision mode for better compatibility and speed. int CWFrameIdx = MFI-CreateStackObject(2, 2); - addFrameReference(BuildMI(BB, X86::FNSTCW16m, 4), CWFrameIdx); + addFrameReference(BuildMI(BB, TII-get(X86::FNSTCW16m)), CWFrameIdx); // Set the high part to be 64-bit precision. - addFrameReference(BuildMI(BB, X86::MOV8mi, 5), + addFrameReference(BuildMI(BB, TII-get(X86::MOV8mi)), CWFrameIdx, 1).addImm(2); // Reload the modified control word now. - addFrameReference(BuildMI(BB, X86::FLDCW16m, 4), CWFrameIdx); + addFrameReference(BuildMI(BB,
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.59 - 1.60 --- Log message: Kill / dead info has been moved to MI's. --- Diffs of the changes: (+11 -18) X86FloatingPoint.cpp | 29 +++-- 1 files changed, 11 insertions(+), 18 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.59 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.60 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.59 Tue Nov 14 13:20:33 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppWed Nov 15 14:56:39 2006 @@ -40,6 +40,7 @@ #include llvm/Support/Debug.h #include llvm/Support/Compiler.h #include llvm/ADT/DepthFirstIterator.h +#include llvm/ADT/SmallVector.h #include llvm/ADT/Statistic.h #include llvm/ADT/STLExtras.h #include algorithm @@ -213,20 +214,12 @@ // Get dead variables list now because the MI pointer may be deleted as part // of processing! -LiveVariables::killed_iterator IB, IE; -tie(IB, IE) = LV-dead_range(MI); - -DEBUG( - const MRegisterInfo *MRI = MF.getTarget().getRegisterInfo(); - LiveVariables::killed_iterator I = LV-killed_begin(MI); - LiveVariables::killed_iterator E = LV-killed_end(MI); - if (I != E) { -std::cerr Killed Operands:; -for (; I != E; ++I) - std::cerr % MRI-getName(*I); -std::cerr \n; - } -); +SmallVectorunsigned, 8 DeadRegs; +for (unsigned i = 0, e = MI-getNumOperands(); i != e; ++i) { + const MachineOperand MO = MI-getOperand(i); + if (MO.isReg() MO.isDead()) +DeadRegs.push_back(MO.getReg()); +} switch (Flags X86II::FPTypeMask) { case X86II::ZeroArgFP: handleZeroArgFP(I); break; @@ -241,8 +234,8 @@ // Check to see if any of the values defined by this instruction are dead // after definition. If so, pop them. -for (; IB != IE; ++IB) { - unsigned Reg = *IB; +for (unsigned i = 0, e = DeadRegs.size(); i != e; ++i) { + unsigned Reg = DeadRegs[i]; if (Reg = X86::FP0 Reg = X86::FP6) { DEBUG(std::cerr Register FP# Reg-X86::FP0 is dead!\n); freeStackSlotAfter(I, Reg-X86::FP0); @@ -762,6 +755,7 @@ unsigned Op0 = getFPReg(MI-getOperand(0)); unsigned Op1 = getFPReg(MI-getOperand(2)); + bool KillsOp1 = LV-KillsRegister(MI, X86::FP0+Op1); // The first operand *must* be on the top of the stack. moveToTop(Op0, I); @@ -773,9 +767,8 @@ MI-getOperand(0).setReg(getSTReg(Op1)); MI-setOpcode(getConcreteOpcode(MI-getOpcode())); - // If we kill the second operand, make sure to pop it from the stack. - if (Op0 != Op1 LV-KillsRegister(MI, X86::FP0+Op1)) { + if (Op0 != Op1 KillsOp1) { // Get this value off of the register stack. freeStackSlotAfter(I, Op1); } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.58 - 1.59 --- Log message: Revert. This wasn't meant to be checked in. --- Diffs of the changes: (+18 -11) X86FloatingPoint.cpp | 29 ++--- 1 files changed, 18 insertions(+), 11 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.58 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.59 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.58 Mon Nov 13 17:36:35 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppTue Nov 14 13:20:33 2006 @@ -40,7 +40,6 @@ #include llvm/Support/Debug.h #include llvm/Support/Compiler.h #include llvm/ADT/DepthFirstIterator.h -#include llvm/ADT/SmallVector.h #include llvm/ADT/Statistic.h #include llvm/ADT/STLExtras.h #include algorithm @@ -214,12 +213,20 @@ // Get dead variables list now because the MI pointer may be deleted as part // of processing! -SmallVectorunsigned, 8 DeadRegs; -for (unsigned i = 0, e = MI-getNumOperands(); i != e; ++i) { - const MachineOperand MO = MI-getOperand(i); - if (MO.isReg() MO.isDead()) -DeadRegs.push_back(MO.getReg()); -} +LiveVariables::killed_iterator IB, IE; +tie(IB, IE) = LV-dead_range(MI); + +DEBUG( + const MRegisterInfo *MRI = MF.getTarget().getRegisterInfo(); + LiveVariables::killed_iterator I = LV-killed_begin(MI); + LiveVariables::killed_iterator E = LV-killed_end(MI); + if (I != E) { +std::cerr Killed Operands:; +for (; I != E; ++I) + std::cerr % MRI-getName(*I); +std::cerr \n; + } +); switch (Flags X86II::FPTypeMask) { case X86II::ZeroArgFP: handleZeroArgFP(I); break; @@ -234,8 +241,8 @@ // Check to see if any of the values defined by this instruction are dead // after definition. If so, pop them. -for (unsigned i = 0, e = DeadRegs.size(); i != e; ++i) { - unsigned Reg = DeadRegs[i]; +for (; IB != IE; ++IB) { + unsigned Reg = *IB; if (Reg = X86::FP0 Reg = X86::FP6) { DEBUG(std::cerr Register FP# Reg-X86::FP0 is dead!\n); freeStackSlotAfter(I, Reg-X86::FP0); @@ -755,7 +762,6 @@ unsigned Op0 = getFPReg(MI-getOperand(0)); unsigned Op1 = getFPReg(MI-getOperand(2)); - bool KillsOp1 = LV-KillsRegister(MI, X86::FP0+Op1); // The first operand *must* be on the top of the stack. moveToTop(Op0, I); @@ -767,8 +773,9 @@ MI-getOperand(0).setReg(getSTReg(Op1)); MI-setOpcode(getConcreteOpcode(MI-getOpcode())); + // If we kill the second operand, make sure to pop it from the stack. - if (Op0 != Op1 KillsOp1) { + if (Op0 != Op1 LV-KillsRegister(MI, X86::FP0+Op1)) { // Get this value off of the register stack. freeStackSlotAfter(I, Op1); } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp X86ISelDAGToDAG.cpp X86ISelLowering.cpp X86InstrInfo.cpp X86RegisterInfo.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.57 - 1.58 X86ISelDAGToDAG.cpp updated: 1.126 - 1.127 X86ISelLowering.cpp updated: 1.291 - 1.292 X86InstrInfo.cpp updated: 1.71 - 1.72 X86RegisterInfo.cpp updated: 1.176 - 1.177 --- Log message: Matches MachineInstr changes. --- Diffs of the changes: (+47 -56) X86FloatingPoint.cpp | 29 +++-- X86ISelDAGToDAG.cpp |9 +++-- X86ISelLowering.cpp |2 +- X86InstrInfo.cpp | 22 +++--- X86RegisterInfo.cpp | 41 + 5 files changed, 47 insertions(+), 56 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.57 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.58 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.57 Sat Nov 11 04:21:44 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppMon Nov 13 17:36:35 2006 @@ -40,6 +40,7 @@ #include llvm/Support/Debug.h #include llvm/Support/Compiler.h #include llvm/ADT/DepthFirstIterator.h +#include llvm/ADT/SmallVector.h #include llvm/ADT/Statistic.h #include llvm/ADT/STLExtras.h #include algorithm @@ -213,20 +214,12 @@ // Get dead variables list now because the MI pointer may be deleted as part // of processing! -LiveVariables::killed_iterator IB, IE; -tie(IB, IE) = LV-dead_range(MI); - -DEBUG( - const MRegisterInfo *MRI = MF.getTarget().getRegisterInfo(); - LiveVariables::killed_iterator I = LV-killed_begin(MI); - LiveVariables::killed_iterator E = LV-killed_end(MI); - if (I != E) { -std::cerr Killed Operands:; -for (; I != E; ++I) - std::cerr % MRI-getName(*I); -std::cerr \n; - } -); +SmallVectorunsigned, 8 DeadRegs; +for (unsigned i = 0, e = MI-getNumOperands(); i != e; ++i) { + const MachineOperand MO = MI-getOperand(i); + if (MO.isReg() MO.isDead()) +DeadRegs.push_back(MO.getReg()); +} switch (Flags X86II::FPTypeMask) { case X86II::ZeroArgFP: handleZeroArgFP(I); break; @@ -241,8 +234,8 @@ // Check to see if any of the values defined by this instruction are dead // after definition. If so, pop them. -for (; IB != IE; ++IB) { - unsigned Reg = *IB; +for (unsigned i = 0, e = DeadRegs.size(); i != e; ++i) { + unsigned Reg = DeadRegs[i]; if (Reg = X86::FP0 Reg = X86::FP6) { DEBUG(std::cerr Register FP# Reg-X86::FP0 is dead!\n); freeStackSlotAfter(I, Reg-X86::FP0); @@ -762,6 +755,7 @@ unsigned Op0 = getFPReg(MI-getOperand(0)); unsigned Op1 = getFPReg(MI-getOperand(2)); + bool KillsOp1 = LV-KillsRegister(MI, X86::FP0+Op1); // The first operand *must* be on the top of the stack. moveToTop(Op0, I); @@ -773,9 +767,8 @@ MI-getOperand(0).setReg(getSTReg(Op1)); MI-setOpcode(getConcreteOpcode(MI-getOpcode())); - // If we kill the second operand, make sure to pop it from the stack. - if (Op0 != Op1 LV-KillsRegister(MI, X86::FP0+Op1)) { + if (Op0 != Op1 KillsOp1) { // Get this value off of the register stack. freeStackSlotAfter(I, Op1); } Index: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp diff -u llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.126 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.127 --- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.126 Sat Nov 11 04:21:44 2006 +++ llvm/lib/Target/X86/X86ISelDAGToDAG.cpp Mon Nov 13 17:36:35 2006 @@ -525,8 +525,7 @@ // Finally, if we found any FP code, emit the FP_REG_KILL instruction. if (ContainsFPCode) { - BuildMI(*BB, BB-getFirstTerminator(), X86::FP_REG_KILL, 0). -addImplicitDefsUses(); + BuildMI(*BB, BB-getFirstTerminator(), X86::FP_REG_KILL, 0); ++NumFPKill; } } @@ -537,8 +536,7 @@ void X86DAGToDAGISel::EmitSpecialCodeForMain(MachineBasicBlock *BB, MachineFrameInfo *MFI) { if (Subtarget-isTargetCygwin()) -BuildMI(BB, X86::CALLpcrel32, 1).addExternalSymbol(__main). - addImplicitDefsUses(); +BuildMI(BB, X86::CALLpcrel32, 1).addExternalSymbol(__main); // Switch the FPU to 64-bit precision mode for better compatibility and speed. int CWFrameIdx = MFI-CreateStackObject(2, 2); @@ -949,8 +947,7 @@ // type of register here. GlobalBaseReg = RegMap-createVirtualRegister(X86::GR32RegisterClass); BuildMI(FirstMBB, MBBI, X86::MovePCtoStack, 0); -BuildMI(FirstMBB, MBBI, X86::POP32r, 1, GlobalBaseReg). - addImplicitDefsUses(); +BuildMI(FirstMBB, MBBI, X86::POP32r, 1, GlobalBaseReg); } return CurDAG-getRegister(GlobalBaseReg, TLI.getPointerTy()).Val; } Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.291 llvm/lib/Target/X86/X86ISelLowering.cpp:1.292 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.291 Sat Nov 11 04:21:44 2006 +++ llvm/lib/Target/X86/X86ISelLowering.cpp
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp X86ISelLowering.cpp X86IntelAsmPrinter.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.54 - 1.55 X86ISelLowering.cpp updated: 1.286 - 1.287 X86IntelAsmPrinter.cpp updated: 1.63 - 1.64 --- Log message: For PR786: http://llvm.org/PR786 : Turn on -Wunused and -Wno-unused-parameter. Clean up most of the resulting fall out by removing unused variables. Remaining warnings have to do with unused functions (I didn't want to delete code without review) and unused variables in generated code. Maintainers should clean up the remaining issues when they see them. All changes pass DejaGnu tests and Olden. --- Diffs of the changes: (+3 -9) X86FloatingPoint.cpp |1 - X86ISelLowering.cpp| 10 +++--- X86IntelAsmPrinter.cpp |1 - 3 files changed, 3 insertions(+), 9 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.54 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.55 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.54 Tue Sep 5 15:27:32 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppThu Nov 2 14:25:49 2006 @@ -106,7 +106,6 @@ bool isAtTop(unsigned RegNo) const { return getSlot(RegNo) == StackTop-1; } void moveToTop(unsigned RegNo, MachineBasicBlock::iterator I) { if (!isAtTop(RegNo)) { -unsigned Slot = getSlot(RegNo); unsigned STReg = getSTReg(RegNo); unsigned RegOnTop = getStackEntry(0); Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.286 llvm/lib/Target/X86/X86ISelLowering.cpp:1.287 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.286 Tue Oct 31 14:13:11 2006 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Thu Nov 2 14:25:49 2006 @@ -532,7 +532,6 @@ SDOperand X86TargetLowering::LowerallTo(SDOperand Op, SelectionDAG DAG) { SDOperand Chain = Op.getOperand(0); unsigned CallingConv= castConstantSDNode(Op.getOperand(1))-getValue(); - bool isVarArg = castConstantSDNode(Op.getOperand(2))-getValue() != 0; bool isTailCall = castConstantSDNode(Op.getOperand(3))-getValue() != 0; SDOperand Callee= Op.getOperand(4); MVT::ValueType RetVT= Op.Val-getValueType(0); @@ -1031,7 +1030,6 @@ SDOperand X86TargetLowering::LowerX86_64allTo(SDOperand Op, SelectionDAG DAG) { SDOperand Chain = Op.getOperand(0); - unsigned CallingConv= castConstantSDNode(Op.getOperand(1))-getValue(); bool isVarArg = castConstantSDNode(Op.getOperand(2))-getValue() != 0; bool isTailCall = castConstantSDNode(Op.getOperand(3))-getValue() != 0; SDOperand Callee= Op.getOperand(4); @@ -1528,8 +1526,6 @@ SDOperand X86TargetLowering::LowerFastCCCallTo(SDOperand Op, SelectionDAG DAG, bool isFastCall) { SDOperand Chain = Op.getOperand(0); - unsigned CallingConv= castConstantSDNode(Op.getOperand(1))-getValue(); - bool isVarArg = castConstantSDNode(Op.getOperand(2))-getValue() != 0; bool isTailCall = castConstantSDNode(Op.getOperand(3))-getValue() != 0; SDOperand Callee= Op.getOperand(4); MVT::ValueType RetVT= Op.Val-getValueType(0); @@ -1549,11 +1545,13 @@ { X86::AX, X86::DX }, { X86::EAX, X86::EDX } }; +#if 0 static const unsigned FastCallGPRArgRegs[][2] = { { X86::CL, X86::DL }, { X86::CX, X86::DX }, { X86::ECX, X86::EDX } }; +#endif static const unsigned XMMArgRegs[] = { X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3 }; @@ -1906,7 +1904,6 @@ SDOperand X86TargetLowering::LowerStdCallCCCallTo(SDOperand Op, SelectionDAG DAG) { SDOperand Chain = Op.getOperand(0); - unsigned CallingConv= castConstantSDNode(Op.getOperand(1))-getValue(); bool isVarArg = castConstantSDNode(Op.getOperand(2))-getValue() != 0; bool isTailCall = castConstantSDNode(Op.getOperand(3))-getValue() != 0; SDOperand Callee= Op.getOperand(4); @@ -2841,7 +2838,7 @@ unsigned i = 0; for (; i != NumElems; ++i) { SDOperand Elt = N-getOperand(i); -if (ConstantSDNode *EltV = dyn_castConstantSDNode(Elt)) { +if (isaConstantSDNode(Elt)) { ElementBase = Elt; break; } @@ -5431,7 +5428,6 @@ SDOperand X86TargetLowering::PerformDAGCombine(SDNode *N, DAGCombinerInfo DCI) const { - TargetMachine TM = getTargetMachine(); SelectionDAG DAG = DCI.DAG; switch (N-getOpcode()) { default: break; Index: llvm/lib/Target/X86/X86IntelAsmPrinter.cpp diff -u llvm/lib/Target/X86/X86IntelAsmPrinter.cpp:1.63 llvm/lib/Target/X86/X86IntelAsmPrinter.cpp:1.64 --- llvm/lib/Target/X86/X86IntelAsmPrinter.cpp:1.63 Tue Oct 31 02:31:24 2006 +++ llvm/lib/Target/X86/X86IntelAsmPrinter.cpp Thu Nov 2 14:25:49 2006 @@ -386,7 +386,6 @@ std::string name = Mang-getValueName(I); Constant *C = I-getInitializer(); -unsigned Size = TD-getTypeSize(C-getType());
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.53 - 1.54 --- Log message: Bugfix to work with the two-addr changes that have been made in the tree recently --- Diffs of the changes: (+2 -1) X86FloatingPoint.cpp |3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.53 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.54 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.53 Sun Aug 27 07:54:01 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppTue Sep 5 15:27:32 2006 @@ -752,7 +752,7 @@ MachineInstr *MI = I; unsigned Op0 = getFPReg(MI-getOperand(0)); - unsigned Op1 = getFPReg(MI-getOperand(1)); + unsigned Op1 = getFPReg(MI-getOperand(2)); // The first operand *must* be on the top of the stack. moveToTop(Op0, I); @@ -760,6 +760,7 @@ // Change the second operand to the stack register that the operand is in. // Change from the pseudo instruction to the concrete instruction. MI-RemoveOperand(0); + MI-RemoveOperand(1); MI-getOperand(0).setReg(getSTReg(Op1)); MI-setOpcode(getConcreteOpcode(MI-getOpcode())); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.51 - 1.52 --- Log message: Do once flag never set to true. --- Diffs of the changes: (+3 -1) X86FloatingPoint.cpp |4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.51 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.52 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.51 Wed Jun 28 18:27:49 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppWed Jul 19 14:33:08 2006 @@ -312,9 +312,11 @@ #else #define ASSERT_SORTED(TABLE) \ { static bool TABLE##Checked = false; \ -if (!TABLE##Checked) \ +if (!TABLE##Checked) {\ assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) \ All lookup tables must be sorted for efficient access!); \ + TABLE##Checked = true; \ +} \ } #endif ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp X86InstrInfo.td
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.49 - 1.50 X86InstrInfo.td updated: 1.238 - 1.239 --- Log message: Added fisttp for fp to int conversion. --- Diffs of the changes: (+29 -3) X86FloatingPoint.cpp | 17 ++--- X86InstrInfo.td | 15 +++ 2 files changed, 29 insertions(+), 3 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.49 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.50 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.49 Thu Jan 26 14:41:32 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppFri Feb 17 20:36:28 2006 @@ -357,6 +357,9 @@ { X86::FpIST16m , X86::FIST16m }, { X86::FpIST32m , X86::FIST32m }, { X86::FpIST64m , X86::FISTP64m }, + { X86::FpISTT16m , X86::FISTTP16m}, + { X86::FpISTT32m , X86::FISTTP32m}, + { X86::FpISTT64m , X86::FISTTP64m}, { X86::FpISUB16m , X86::FISUB16m }, { X86::FpISUB32m , X86::FISUB32m }, { X86::FpISUBR16m, X86::FISUBR16m}, @@ -502,12 +505,17 @@ unsigned Reg = getFPReg(MI-getOperand(MI-getNumOperands()-1)); bool KillsSrc = LV-KillsRegister(MI, X86::FP0+Reg); - // FISTP64r is strange because there isn't a non-popping versions. + // FISTP64m is strange because there isn't a non-popping versions. // If we have one _and_ we don't want to pop the operand, duplicate the value // on the stack instead of moving it. This ensure that popping the value is // always ok. + // Ditto FISTTP16m, FISTTP32m, FISTTP64m. // - if (MI-getOpcode() == X86::FpIST64m !KillsSrc) { + if (!KillsSrc + (MI-getOpcode() == X86::FpIST64m || + MI-getOpcode() == X86::FpISTT16m || + MI-getOpcode() == X86::FpISTT32m || + MI-getOpcode() == X86::FpISTT64m)) { duplicateToTop(Reg, 7 /*temp register*/, I); } else { moveToTop(Reg, I);// Move to the top of the stack... @@ -517,7 +525,10 @@ MI-RemoveOperand(MI-getNumOperands()-1);// Remove explicit ST(0) operand MI-setOpcode(getConcreteOpcode(MI-getOpcode())); - if (MI-getOpcode() == X86::FISTP64m) { + if (MI-getOpcode() == X86::FISTP64m || + MI-getOpcode() == X86::FISTTP16m || + MI-getOpcode() == X86::FISTTP32m || + MI-getOpcode() == X86::FISTTP64m) { assert(StackTop 0 Stack empty??); --StackTop; } else if (KillsSrc) { // Last use of operand? Index: llvm/lib/Target/X86/X86InstrInfo.td diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.238 llvm/lib/Target/X86/X86InstrInfo.td:1.239 --- llvm/lib/Target/X86/X86InstrInfo.td:1.238 Fri Feb 17 18:15:05 2006 +++ llvm/lib/Target/X86/X86InstrInfo.td Fri Feb 17 20:36:28 2006 @@ -2957,6 +2957,21 @@ def FISTP32m : FPI0xDB, MRM3m, (ops i32mem:$dst), fistp{l} $dst; def FISTP64m : FPI0xDF, MRM7m, (ops i64mem:$dst), fistp{ll} $dst; +// FISTTP requires SSE3 even though it's a FPStack op. +def FpISTT16m : FpI_(ops i16mem:$op, RFP:$src), OneArgFP, +[(X86fp_to_i16mem RFP:$src, addr:$op)], +Requires[HasSSE3]; +def FpISTT32m : FpI_(ops i32mem:$op, RFP:$src), OneArgFP, +[(X86fp_to_i32mem RFP:$src, addr:$op)], +Requires[HasSSE3]; +def FpISTT64m : FpI_(ops i64mem:$op, RFP:$src), OneArgFP, +[(X86fp_to_i64mem RFP:$src, addr:$op)], +Requires[HasSSE3]; + +def FISTTP16m : FPI0xDF, MRM1m, (ops i16mem:$dst), fisttp{s} $dst; +def FISTTP32m : FPI0xDB, MRM1m, (ops i32mem:$dst), fisttp{l} $dst; +def FISTTP64m : FPI0xDD, MRM1m, (ops i64mem:$dst), fisttp{ll} $dst; + // FP Stack manipulation instructions. def FLDrr : FPI0xC0, AddRegFrm, (ops RST:$op), fld $op, D9; def FSTrr : FPI0xD0, AddRegFrm, (ops RST:$op), fst $op, DD; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp X86ISelPattern.cpp X86InstrInfo.td
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.46 - 1.47 X86ISelPattern.cpp updated: 1.198 - 1.199 X86InstrInfo.td updated: 1.215 - 1.216 --- Log message: Rename fcmovae to fcmovnb and fcmova to fcmovnbe (following Intel manual). Some assemblers can't recognize the aliases. --- Diffs of the changes: (+9 -9) X86FloatingPoint.cpp |4 ++-- X86ISelPattern.cpp |2 +- X86InstrInfo.td | 12 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.46 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.47 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.46 Tue Jan 10 16:22:02 2006 +++ llvm/lib/Target/X86/X86FloatingPoint.cppFri Jan 20 20:55:41 2006 @@ -324,11 +324,11 @@ { X86::FpADD32m , X86::FADD32m }, { X86::FpADD64m , X86::FADD64m }, { X86::FpCHS , X86::FCHS }, - { X86::FpCMOVA , X86::FCMOVA }, - { X86::FpCMOVAE , X86::FCMOVAE }, { X86::FpCMOVB , X86::FCMOVB }, { X86::FpCMOVBE , X86::FCMOVBE }, { X86::FpCMOVE , X86::FCMOVE }, + { X86::FpCMOVNB , X86::FCMOVNB }, + { X86::FpCMOVNBE , X86::FCMOVNBE }, { X86::FpCMOVNE , X86::FCMOVNE }, { X86::FpCMOVNP , X86::FCMOVNP }, { X86::FpCMOVP , X86::FCMOVP }, Index: llvm/lib/Target/X86/X86ISelPattern.cpp diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.198 llvm/lib/Target/X86/X86ISelPattern.cpp:1.199 --- llvm/lib/Target/X86/X86ISelPattern.cpp:1.198Sun Jan 15 03:00:21 2006 +++ llvm/lib/Target/X86/X86ISelPattern.cpp Fri Jan 20 20:55:41 2006 @@ -758,7 +758,7 @@ static const unsigned CMOVTABFP[] = { X86::FpCMOVE, X86::FpCMOVNE, /*missing*/0, /*missing*/0, /*missing*/0, /*missing*/ 0, X86::FpCMOVB, X86::FpCMOVBE, -X86::FpCMOVA, X86::FpCMOVAE, X86::FpCMOVP, X86::FpCMOVNP +X86::FpCMOVNBE,X86::FpCMOVNB, X86::FpCMOVP, X86::FpCMOVNP }; static const int SSE_CMOVTAB[] = { /*CMPEQ*/ 0, /*CMPNEQ*/ 4, /*missing*/ 0, /*missing*/ 0, Index: llvm/lib/Target/X86/X86InstrInfo.td diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.215 llvm/lib/Target/X86/X86InstrInfo.td:1.216 --- llvm/lib/Target/X86/X86InstrInfo.td:1.215 Thu Jan 19 19:13:30 2006 +++ llvm/lib/Target/X86/X86InstrInfo.td Fri Jan 20 20:55:41 2006 @@ -2862,10 +2862,10 @@ def FpCMOVP : FpI(ops RFP:$dst, RFP:$src1, RFP:$src2), CondMovFP, [(set RFP:$dst, (X86cmov RFP:$src1, RFP:$src2, X86_COND_P, STATUS))]; - def FpCMOVAE : FpI(ops RFP:$dst, RFP:$src1, RFP:$src2), CondMovFP, + def FpCMOVNB : FpI(ops RFP:$dst, RFP:$src1, RFP:$src2), CondMovFP, [(set RFP:$dst, (X86cmov RFP:$src1, RFP:$src2, X86_COND_AE, STATUS))]; - def FpCMOVA : FpI(ops RFP:$dst, RFP:$src1, RFP:$src2), CondMovFP, + def FpCMOVNBE: FpI(ops RFP:$dst, RFP:$src1, RFP:$src2), CondMovFP, [(set RFP:$dst, (X86cmov RFP:$src1, RFP:$src2, X86_COND_A, STATUS))]; def FpCMOVNE : FpI(ops RFP:$dst, RFP:$src1, RFP:$src2), CondMovFP, @@ -2884,10 +2884,10 @@ fcmove {$op, %ST(0)|%ST(0), $op}, DA; def FCMOVP : FPI0xD8, AddRegFrm, (ops RST:$op), fcmovu {$op, %ST(0)|%ST(0), $op}, DA; -def FCMOVAE : FPI0xC0, AddRegFrm, (ops RST:$op), - fcmovae {$op, %ST(0)|%ST(0), $op}, DB; -def FCMOVA : FPI0xD0, AddRegFrm, (ops RST:$op), - fcmova {$op, %ST(0)|%ST(0), $op}, DB; +def FCMOVNB : FPI0xC0, AddRegFrm, (ops RST:$op), + fcmovnb {$op, %ST(0)|%ST(0), $op}, DB; +def FCMOVNBE : FPI0xD0, AddRegFrm, (ops RST:$op), + fcmovnbe {$op, %ST(0)|%ST(0), $op}, DB; def FCMOVNE : FPI0xC8, AddRegFrm, (ops RST:$op), fcmovne {$op, %ST(0)|%ST(0), $op}, DB; def FCMOVNP : FPI0xD8, AddRegFrm, (ops RST:$op), ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/X86/X86FloatingPoint.cpp X86InstrInfo.td
Changes in directory llvm/lib/Target/X86: X86FloatingPoint.cpp updated: 1.45 - 1.46 X86InstrInfo.td updated: 1.193 - 1.194 --- Log message: * fp to sint patterns. * fiadd, fisub, etc. --- Diffs of the changes: (+119 -56) X86FloatingPoint.cpp | 92 --- X86InstrInfo.td | 83 +- 2 files changed, 119 insertions(+), 56 deletions(-) Index: llvm/lib/Target/X86/X86FloatingPoint.cpp diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.45 llvm/lib/Target/X86/X86FloatingPoint.cpp:1.46 --- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.45 Wed Dec 21 01:47:04 2005 +++ llvm/lib/Target/X86/X86FloatingPoint.cppTue Jan 10 16:22:02 2006 @@ -320,46 +320,58 @@ // concrete X86 instruction which uses the register stack. // static const TableEntry OpcodeTable[] = { - { X86::FpABS, X86::FABS }, - { X86::FpADD32m , X86::FADD32m }, - { X86::FpADD64m , X86::FADD64m }, - { X86::FpCHS, X86::FCHS }, - { X86::FpCMOVA , X86::FCMOVA }, - { X86::FpCMOVAE , X86::FCMOVAE }, - { X86::FpCMOVB , X86::FCMOVB }, - { X86::FpCMOVBE , X86::FCMOVBE }, - { X86::FpCMOVE , X86::FCMOVE }, - { X86::FpCMOVNE , X86::FCMOVNE }, - { X86::FpCMOVNP , X86::FCMOVNP }, - { X86::FpCMOVP , X86::FCMOVP }, - { X86::FpCOS, X86::FCOS }, - { X86::FpDIV32m , X86::FDIV32m }, - { X86::FpDIV64m , X86::FDIV64m }, - { X86::FpDIVR32m, X86::FDIVR32m }, - { X86::FpDIVR64m, X86::FDIVR64m }, - { X86::FpILD16m , X86::FILD16m }, - { X86::FpILD32m , X86::FILD32m }, - { X86::FpILD64m , X86::FILD64m }, - { X86::FpIST16m , X86::FIST16m }, - { X86::FpIST32m , X86::FIST32m }, - { X86::FpIST64m , X86::FISTP64m }, - { X86::FpLD0, X86::FLD0 }, - { X86::FpLD1, X86::FLD1 }, - { X86::FpLD32m , X86::FLD32m }, - { X86::FpLD64m , X86::FLD64m }, - { X86::FpMUL32m , X86::FMUL32m }, - { X86::FpMUL64m , X86::FMUL64m }, - { X86::FpSIN, X86::FSIN }, - { X86::FpSQRT , X86::FSQRT}, - { X86::FpST32m , X86::FST32m }, - { X86::FpST64m , X86::FST64m }, - { X86::FpSUB32m , X86::FSUB32m }, - { X86::FpSUB64m , X86::FSUB64m }, - { X86::FpSUBR32m, X86::FSUBR32m }, - { X86::FpSUBR64m, X86::FSUBR64m }, - { X86::FpTST, X86::FTST }, - { X86::FpUCOMIr , X86::FUCOMIr }, - { X86::FpUCOMr , X86::FUCOMr }, + { X86::FpABS , X86::FABS }, + { X86::FpADD32m , X86::FADD32m }, + { X86::FpADD64m , X86::FADD64m }, + { X86::FpCHS , X86::FCHS }, + { X86::FpCMOVA , X86::FCMOVA }, + { X86::FpCMOVAE , X86::FCMOVAE }, + { X86::FpCMOVB , X86::FCMOVB }, + { X86::FpCMOVBE , X86::FCMOVBE }, + { X86::FpCMOVE , X86::FCMOVE }, + { X86::FpCMOVNE , X86::FCMOVNE }, + { X86::FpCMOVNP , X86::FCMOVNP }, + { X86::FpCMOVP , X86::FCMOVP }, + { X86::FpCOS , X86::FCOS }, + { X86::FpDIV32m , X86::FDIV32m }, + { X86::FpDIV64m , X86::FDIV64m }, + { X86::FpDIVR32m , X86::FDIVR32m }, + { X86::FpDIVR64m , X86::FDIVR64m }, + { X86::FpIADD16m , X86::FIADD16m }, + { X86::FpIADD32m , X86::FIADD32m }, + { X86::FpIDIV16m , X86::FIDIV16m }, + { X86::FpIDIV32m , X86::FIDIV32m }, + { X86::FpIDIVR16m, X86::FIDIVR16m}, + { X86::FpIDIVR32m, X86::FIDIVR32m}, + { X86::FpILD16m , X86::FILD16m }, + { X86::FpILD32m , X86::FILD32m }, + { X86::FpILD64m , X86::FILD64m }, + { X86::FpIMUL16m , X86::FIMUL16m }, + { X86::FpIMUL32m , X86::FIMUL32m }, + { X86::FpIST16m , X86::FIST16m }, + { X86::FpIST32m , X86::FIST32m }, + { X86::FpIST64m , X86::FISTP64m }, + { X86::FpISUB16m , X86::FISUB16m }, + { X86::FpISUB32m , X86::FISUB32m }, + { X86::FpISUBR16m, X86::FISUBR16m}, + { X86::FpISUBR32m, X86::FISUBR32m}, + { X86::FpLD0 , X86::FLD0 }, + { X86::FpLD1 , X86::FLD1 }, + { X86::FpLD32m , X86::FLD32m }, + { X86::FpLD64m , X86::FLD64m }, + { X86::FpMUL32m , X86::FMUL32m }, + { X86::FpMUL64m , X86::FMUL64m }, + { X86::FpSIN , X86::FSIN }, + { X86::FpSQRT, X86::FSQRT}, + { X86::FpST32m , X86::FST32m }, + { X86::FpST64m , X86::FST64m }, + { X86::FpSUB32m , X86::FSUB32m }, + { X86::FpSUB64m , X86::FSUB64m }, + { X86::FpSUBR32m , X86::FSUBR32m }, + { X86::FpSUBR64m , X86::FSUBR64m }, + { X86::FpTST , X86::FTST }, + { X86::FpUCOMIr , X86::FUCOMIr }, + { X86::FpUCOMr , X86::FUCOMr }, }; static unsigned getConcreteOpcode(unsigned Opcode) { Index: llvm/lib/Target/X86/X86InstrInfo.td diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.193 llvm/lib/Target/X86/X86InstrInfo.td:1.194 --- llvm/lib/Target/X86/X86InstrInfo.td:1.193 Tue Jan 10 14:26:56 2006 +++ llvm/lib/Target/X86/X86InstrInfo.td Tue Jan 10 16:22:02 2006 @@ -50,6 +50,7 @@ SDTCisPtrTy1, SDTCisVT2, OtherVT]; def SDTX86Fst : SDTypeProfile0, 3, [SDTCisFP0, SDTCisPtrTy1, SDTCisVT2, OtherVT]; +def