Changes in directory llvm/lib/Target/X86:
X86ATTAsmPrinter.cpp updated: 1.80 -> 1.81 X86AsmPrinter.cpp updated: 1.223 -> 1.224 X86AsmPrinter.h updated: 1.40 -> 1.41 X86ISelDAGToDAG.cpp updated: 1.140 -> 1.141 X86ISelLowering.cpp updated: 1.308 -> 1.309 X86RegisterInfo.cpp updated: 1.187 -> 1.188 X86Subtarget.cpp updated: 1.46 -> 1.47 X86Subtarget.h updated: 1.24 -> 1.25 X86TargetAsmInfo.cpp updated: 1.14 -> 1.15 X86TargetMachine.cpp updated: 1.133 -> 1.134 --- Log message: Really big cleanup. - New target type "mingw" was introduced - Same things for both mingw & cygwin are marked as "cygming" (as in gcc) - .lcomm is supported here, so allow LLVM to use it - Correctly use underscored versions of setjmp & _longjmp for both mingw & cygwin --- Diffs of the changes: (+33 -24) X86ATTAsmPrinter.cpp | 12 ++++++------ X86AsmPrinter.cpp | 10 +++++----- X86AsmPrinter.h | 2 +- X86ISelDAGToDAG.cpp | 2 +- X86ISelLowering.cpp | 6 +++--- X86RegisterInfo.cpp | 4 ++-- X86Subtarget.cpp | 12 ++++++++---- X86Subtarget.h | 5 ++++- X86TargetAsmInfo.cpp | 2 ++ X86TargetMachine.cpp | 2 +- 10 files changed, 33 insertions(+), 24 deletions(-) Index: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp diff -u llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.80 llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.81 --- llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.80 Tue Dec 19 16:59:26 2006 +++ llvm/lib/Target/X86/X86ATTAsmPrinter.cpp Wed Jan 3 05:43:14 2007 @@ -42,7 +42,7 @@ case Function::LinkOnceLinkage: if (Subtarget->isTargetDarwin()) { return ".section __TEXT,__textcoal_nt,coalesced,pure_instructions"; - } else if (Subtarget->isTargetCygwin()) { + } else if (Subtarget->isTargetCygMing()) { return "\t.section\t.text$linkonce." + CurrentFnName + ",\"ax\"\n"; } else { return "\t.section\t.llvm.linkonce.t." + CurrentFnName + @@ -57,7 +57,7 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) { if (Subtarget->isTargetDarwin() || Subtarget->isTargetELF() || - Subtarget->isTargetCygwin()) { + Subtarget->isTargetCygMing()) { // Let PassManager know we need debug information and relay // the MachineDebugInfo address on to DwarfWriter. DW.SetDebugInfo(&getAnalysis<MachineDebugInfo>()); @@ -99,7 +99,7 @@ if (Subtarget->isTargetDarwin()) { O << "\t.globl\t" << CurrentFnName << "\n"; O << "\t.weak_definition\t" << CurrentFnName << "\n"; - } else if (Subtarget->isTargetCygwin()) { + } else if (Subtarget->isTargetCygMing()) { EmitAlignment(4, F); // FIXME: This should be parameterized somewhere. O << "\t.linkonce discard\n"; O << "\t.globl " << CurrentFnName << "\n"; @@ -111,14 +111,14 @@ } O << CurrentFnName << ":\n"; // Add some workaround for linkonce linkage on Cygwin\MinGW - if (Subtarget->isTargetCygwin() && + if (Subtarget->isTargetCygMing() && (F->getLinkage() == Function::LinkOnceLinkage || F->getLinkage() == Function::WeakLinkage)) O << "_llvm$workaround$fake$stub_" << CurrentFnName << ":\n"; if (Subtarget->isTargetDarwin() || Subtarget->isTargetELF() || - Subtarget->isTargetCygwin()) { + Subtarget->isTargetCygMing()) { // Emit pre-function debug information. DW.BeginFunction(&MF); } @@ -150,7 +150,7 @@ if (Subtarget->isTargetDarwin() || Subtarget->isTargetELF() || - Subtarget->isTargetCygwin()) { + Subtarget->isTargetCygMing()) { // Emit post-function debug information. DW.EndFunction(); } Index: llvm/lib/Target/X86/X86AsmPrinter.cpp diff -u llvm/lib/Target/X86/X86AsmPrinter.cpp:1.223 llvm/lib/Target/X86/X86AsmPrinter.cpp:1.224 --- llvm/lib/Target/X86/X86AsmPrinter.cpp:1.223 Tue Dec 19 16:59:26 2006 +++ llvm/lib/Target/X86/X86AsmPrinter.cpp Wed Jan 3 05:43:14 2007 @@ -111,7 +111,7 @@ // Emit initial debug information. DW.BeginModule(&M); - } else if (Subtarget->isTargetELF() || Subtarget->isTargetCygwin()) { + } else if (Subtarget->isTargetELF() || Subtarget->isTargetCygMing()) { // Emit initial debug information. DW.BeginModule(&M); } @@ -161,7 +161,7 @@ } else O << TAI->getCOMMDirective() << name << "," << Size; } else { - if (!Subtarget->isTargetCygwin()) { + if (!Subtarget->isTargetCygMing()) { if (I->hasInternalLinkage()) O << "\t.local\t" << name << "\n"; } @@ -179,7 +179,7 @@ O << "\t.globl " << name << "\n" << "\t.weak_definition " << name << "\n"; SwitchToDataSection(".section __DATA,__const_coal,coalesced", I); - } else if (Subtarget->isTargetCygwin()) { + } else if (Subtarget->isTargetCygMing()) { std::string SectionName(".section\t.data$linkonce." + name + ",\"aw\""); @@ -218,7 +218,7 @@ I->getSection() == ".dtors")) { std::string SectionName = ".section " + I->getSection(); - if (Subtarget->isTargetCygwin()) { + if (Subtarget->isTargetCygMing()) { SectionName += ",\"aw\""; } else { assert(!Subtarget->isTargetDarwin()); @@ -310,7 +310,7 @@ // linker can safely perform dead code stripping. Since LLVM never // generates code that does this, it is always safe to set. O << "\t.subsections_via_symbols\n"; - } else if (Subtarget->isTargetELF() || Subtarget->isTargetCygwin()) { + } else if (Subtarget->isTargetELF() || Subtarget->isTargetCygMing()) { // Emit final debug information. DW.EndModule(); } Index: llvm/lib/Target/X86/X86AsmPrinter.h diff -u llvm/lib/Target/X86/X86AsmPrinter.h:1.40 llvm/lib/Target/X86/X86AsmPrinter.h:1.41 --- llvm/lib/Target/X86/X86AsmPrinter.h:1.40 Tue Dec 19 16:59:26 2006 +++ llvm/lib/Target/X86/X86AsmPrinter.h Wed Jan 3 05:43:14 2007 @@ -67,7 +67,7 @@ AU.setPreservesAll(); if (Subtarget->isTargetDarwin() || Subtarget->isTargetELF() || - Subtarget->isTargetCygwin()) { + Subtarget->isTargetCygMing()) { AU.addRequired<MachineDebugInfo>(); } MachineFunctionPass::getAnalysisUsage(AU); Index: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp diff -u llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.140 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.141 --- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.140 Tue Dec 19 16:59:26 2006 +++ llvm/lib/Target/X86/X86ISelDAGToDAG.cpp Wed Jan 3 05:43:14 2007 @@ -534,7 +534,7 @@ void X86DAGToDAGISel::EmitSpecialCodeForMain(MachineBasicBlock *BB, MachineFrameInfo *MFI) { const TargetInstrInfo *TII = TM.getInstrInfo(); - if (Subtarget->isTargetCygwin()) + if (Subtarget->isTargetCygMing()) BuildMI(BB, TII->get(X86::CALLpcrel32)).addExternalSymbol("__main"); // Switch the FPU to 64-bit precision mode for better compatibility and speed. Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.308 llvm/lib/Target/X86/X86ISelLowering.cpp:1.309 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.308 Sat Dec 30 23:55:36 2006 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Wed Jan 3 05:43:14 2007 @@ -58,7 +58,7 @@ // Darwin should use _setjmp/_longjmp instead of setjmp/longjmp. setUseUnderscoreSetJmp(false); setUseUnderscoreLongJmp(false); - } else if (Subtarget->isTargetCygwin()) { + } else if (Subtarget->isTargetMingw()) { // MS runtime is weird: it exports _setjmp, but longjmp! setUseUnderscoreSetJmp(true); setUseUnderscoreLongJmp(false); @@ -234,7 +234,7 @@ // FIXME - use subtarget debug flags if (!Subtarget->isTargetDarwin() && !Subtarget->isTargetELF() && - !Subtarget->isTargetCygwin()) + !Subtarget->isTargetCygMing()) setOperationAction(ISD::DEBUG_LABEL, MVT::Other, Expand); // VASTART needs to be custom lowered to use the VarArgsFrameIndex @@ -4405,7 +4405,7 @@ MachineFunction &MF = DAG.getMachineFunction(); const Function* Fn = MF.getFunction(); if (Fn->hasExternalLinkage() && - Subtarget->isTargetCygwin() && + Subtarget->isTargetCygMing() && Fn->getName() == "main") MF.getInfo<X86FunctionInfo>()->setForceFramePointer(true); Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.187 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.188 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.187 Tue Jan 2 15:33:40 2007 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Wed Jan 3 05:43:14 2007 @@ -1010,7 +1010,7 @@ MFI->setStackSize(NumBytes); if (NumBytes) { // adjust stack pointer: ESP -= numbytes - if (NumBytes >= 4096 && Subtarget->isTargetCygwin()) { + if (NumBytes >= 4096 && Subtarget->isTargetCygMing()) { // Function prologue calls _alloca to probe the stack when allocating // more than 4k bytes in one go. Touching the stack at 4K increments is // necessary to ensure that the guard pages used by the OS virtual memory @@ -1054,7 +1054,7 @@ // If it's main() on Cygwin\Mingw32 we should align stack as well if (Fn->hasExternalLinkage() && Fn->getName() == "main" && - Subtarget->isTargetCygwin()) { + Subtarget->isTargetCygMing()) { MI= BuildMI(TII.get(X86::AND32ri), X86::ESP).addReg(X86::ESP).addImm(-Align); MBB.insert(MBBI, MI); Index: llvm/lib/Target/X86/X86Subtarget.cpp diff -u llvm/lib/Target/X86/X86Subtarget.cpp:1.46 llvm/lib/Target/X86/X86Subtarget.cpp:1.47 --- llvm/lib/Target/X86/X86Subtarget.cpp:1.46 Fri Dec 22 16:29:05 2006 +++ llvm/lib/Target/X86/X86Subtarget.cpp Wed Jan 3 05:43:14 2007 @@ -40,7 +40,7 @@ return (!isDirectCall && (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() || (GV->isExternal() && !GV->hasNotBeenReadFromBytecode()))); - } else if (isTargetCygwin() || isTargetWindows()) { + } else if (isTargetCygMing() || isTargetWindows()) { return (GV->hasDLLImportLinkage()); } @@ -248,16 +248,19 @@ // if one cannot be determined, to true. const std::string& TT = M.getTargetTriple(); if (TT.length() > 5) { - if (TT.find("cygwin") != std::string::npos || - TT.find("mingw") != std::string::npos) + if (TT.find("cygwin") != std::string::npos) TargetType = isCygwin; + else if (TT.find("mingw") != std::string::npos) + TargetType = isMingw; else if (TT.find("darwin") != std::string::npos) TargetType = isDarwin; else if (TT.find("win32") != std::string::npos) TargetType = isWindows; } else if (TT.empty()) { -#if defined(__CYGWIN__) || defined(__MINGW32__) +#if defined(__CYGWIN__) TargetType = isCygwin; +#elif defined(__MINGW32__) + TargetType = isMingw; #elif defined(__APPLE__) TargetType = isDarwin; #elif defined(_WIN32) @@ -277,6 +280,7 @@ if (TargetType == isDarwin || TargetType == isCygwin || + TargetType == isMingw || (TargetType == isELF && Is64Bit)) stackAlignment = 16; } Index: llvm/lib/Target/X86/X86Subtarget.h diff -u llvm/lib/Target/X86/X86Subtarget.h:1.24 llvm/lib/Target/X86/X86Subtarget.h:1.25 --- llvm/lib/Target/X86/X86Subtarget.h:1.24 Fri Dec 22 16:29:05 2006 +++ llvm/lib/Target/X86/X86Subtarget.h Wed Jan 3 05:43:14 2007 @@ -64,7 +64,7 @@ public: enum { - isELF, isCygwin, isDarwin, isWindows + isELF, isCygwin, isDarwin, isWindows, isMingw } TargetType; /// This constructor initializes the data members to match that @@ -106,6 +106,9 @@ bool isTargetDarwin() const { return TargetType == isDarwin; } bool isTargetELF() const { return TargetType == isELF; } bool isTargetWindows() const { return TargetType == isWindows; } + bool isTargetMingw() const { return TargetType == isMingw; } + bool isTargetCygMing() const { return (TargetType == isMingw || + TargetType == isCygwin); } bool isTargetCygwin() const { return TargetType == isCygwin; } /// True if accessing the GV requires an extra load. For Windows, dllimported Index: llvm/lib/Target/X86/X86TargetAsmInfo.cpp diff -u llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.14 llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.15 --- llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.14 Sat Dec 30 23:55:36 2006 +++ llvm/lib/Target/X86/X86TargetAsmInfo.cpp Wed Jan 3 05:43:14 2007 @@ -103,7 +103,9 @@ break; case X86Subtarget::isCygwin: + case X86Subtarget::isMingw: GlobalPrefix = "_"; + LCOMMDirective = "\t.lcomm\t"; COMMDirectiveTakesAlignment = false; HasDotTypeDotSizeDirective = false; StaticCtorsSection = "\t.section .ctors,\"aw\""; Index: llvm/lib/Target/X86/X86TargetMachine.cpp diff -u llvm/lib/Target/X86/X86TargetMachine.cpp:1.133 llvm/lib/Target/X86/X86TargetMachine.cpp:1.134 --- llvm/lib/Target/X86/X86TargetMachine.cpp:1.133 Fri Dec 22 16:29:05 2006 +++ llvm/lib/Target/X86/X86TargetMachine.cpp Wed Jan 3 05:43:14 2007 @@ -115,7 +115,7 @@ Subtarget.getStackAlignment(), Subtarget.is64Bit() ? -8 : -4), InstrInfo(*this), JITInfo(*this), TLInfo(*this) { if (getRelocationModel() == Reloc::Default) - if (Subtarget.isTargetDarwin() || Subtarget.isTargetCygwin()) + if (Subtarget.isTargetDarwin() || Subtarget.isTargetCygMing()) setRelocationModel(Reloc::DynamicNoPIC); else setRelocationModel(Reloc::Static); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits