[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