[llvm-commits] CVS: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp X86AsmPrinter.cpp X86AsmPrinter.h X86ISelDAGToDAG.cpp X86ISelLowering.cpp X86RegisterInfo.cpp X86Subtarget.cpp X86Subtarget.h X86TargetAsmInfo.cpp X86TargetMachine.cpp

Anton Korobeynikov asl at math.spbu.ru
Wed Jan 3 03:43:30 PST 2007



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






More information about the llvm-commits mailing list