Index: include/llvm/ADT/Triple.h =================================================================== --- include/llvm/ADT/Triple.h +++ include/llvm/ADT/Triple.h @@ -193,6 +193,7 @@ MuslEABI, MuslEABIHF, + Midipix, MSVC, Itanium, Cygnus, @@ -527,9 +528,14 @@ return getOS() == Triple::Win32 && getEnvironment() == Triple::GNU; } + bool isWindowsMidipixEnvironment() const { + return getOS() == Triple::Win32 && getEnvironment() == Triple::Midipix; + } + /// Tests for either Cygwin or MinGW OS - bool isOSCygMing() const { - return isWindowsCygwinEnvironment() || isWindowsGNUEnvironment(); + bool isOSMidiCygMing() const { + return isWindowsMidipixEnvironment() || isWindowsCygwinEnvironment() || + isWindowsGNUEnvironment(); } /// Is this a "Windows" OS targeting a "MSVCRT.dll" environment. Index: lib/Analysis/TargetLibraryInfo.cpp =================================================================== --- lib/Analysis/TargetLibraryInfo.cpp +++ lib/Analysis/TargetLibraryInfo.cpp @@ -142,7 +142,7 @@ TLI.setUnavailable(LibFunc_fiprintf); } - if (T.isOSWindows() && !T.isOSCygMing()) { + if (T.isOSWindows() && !T.isOSMidiCygMing()) { // Win32 does not support long double TLI.setUnavailable(LibFunc_acosl); TLI.setUnavailable(LibFunc_asinl); Index: lib/Support/Triple.cpp =================================================================== --- lib/Support/Triple.cpp +++ lib/Support/Triple.cpp @@ -220,6 +220,7 @@ case Musl: return "musl"; case MuslEABI: return "musleabi"; case MuslEABIHF: return "musleabihf"; + case Midipix: return "midipix"; case MSVC: return "msvc"; case Itanium: return "itanium"; case Cygnus: return "cygnus"; @@ -496,6 +497,7 @@ .StartsWith("musleabihf", Triple::MuslEABIHF) .StartsWith("musleabi", Triple::MuslEABI) .StartsWith("musl", Triple::Musl) + .StartsWith("midipix",Triple::Midipix) .StartsWith("msvc", Triple::MSVC) .StartsWith("itanium", Triple::Itanium) .StartsWith("cygnus", Triple::Cygnus) @@ -722,6 +724,7 @@ std::string Triple::normalize(StringRef Str) { bool IsMinGW32 = false; bool IsCygwin = false; + bool IsMidipix = false; // Parse into components. SmallVector Components; @@ -743,6 +746,7 @@ OS = parseOS(Components[2]); IsCygwin = Components[2].startswith("cygwin"); IsMinGW32 = Components[2].startswith("mingw"); + IsMidipix = Components[2].startswith("midipix"); } EnvironmentType Environment = UnknownEnvironment; if (Components.size() > 3) @@ -788,7 +792,8 @@ OS = parseOS(Comp); IsCygwin = Comp.startswith("cygwin"); IsMinGW32 = Comp.startswith("mingw"); - Valid = OS != UnknownOS || IsCygwin || IsMinGW32; + IsMidipix = Comp.startswith("midipix"); + Valid = OS != UnknownOS || IsCygwin || IsMinGW32 || IsMidipix; break; case 3: Environment = parseEnvironment(Comp); @@ -886,8 +891,12 @@ Components.resize(4); Components[2] = "windows"; Components[3] = "cygnus"; + } else if (IsMidipix) { + Components.resize(4); + Components[2] = "windows"; + Components[3] = "midipix"; } - if (IsMinGW32 || IsCygwin || + if (IsMinGW32 || IsCygwin || IsMidipix || (OS == Triple::Win32 && Environment != UnknownEnvironment)) { if (ObjectFormat != UnknownObjectFormat && ObjectFormat != Triple::COFF) { Components.resize(5); Index: lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp =================================================================== --- lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp +++ lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp @@ -59,7 +59,7 @@ if (TT.isOSDarwin()) return isEH ? DWARFFlavour::X86_32_DarwinEH : DWARFFlavour::X86_32_Generic; - if (TT.isOSCygMing()) + if (TT.isOSMidiCygMing()) // Unsupported by now, just quick fallback return DWARFFlavour::X86_32_Generic; return DWARFFlavour::X86_32_Generic; @@ -171,7 +171,7 @@ } else if (TheTriple.isWindowsMSVCEnvironment() || TheTriple.isWindowsCoreCLREnvironment()) { MAI = new X86MCAsmInfoMicrosoft(TheTriple); - } else if (TheTriple.isOSCygMing() || + } else if (TheTriple.isOSMidiCygMing() || TheTriple.isWindowsItaniumEnvironment()) { MAI = new X86MCAsmInfoGNUCOFF(TheTriple); } else { Index: lib/Target/X86/X86CallingConv.td =================================================================== --- lib/Target/X86/X86CallingConv.td +++ lib/Target/X86/X86CallingConv.td @@ -875,7 +875,7 @@ ]>; def CC_X86_32_ThisCall : CallingConv<[ - CCIfSubtarget<"isTargetCygMing()", CCDelegateTo>, + CCIfSubtarget<"isTargetMidiCygMing()", CCDelegateTo>, CCDelegateTo ]>; Index: lib/Target/X86/X86FrameLowering.cpp =================================================================== --- lib/Target/X86/X86FrameLowering.cpp +++ lib/Target/X86/X86FrameLowering.cpp @@ -721,12 +721,12 @@ const char *Symbol; if (Is64Bit) { - if (STI.isTargetCygMing()) { + if (STI.isTargetMidiCygMing()) { Symbol = "___chkstk_ms"; } else { Symbol = "__chkstk"; } - } else if (STI.isTargetCygMing()) + } else if (STI.isTargetMidiCygMing()) Symbol = "_alloca"; else Symbol = "_chkstk"; Index: lib/Target/X86/X86ISelDAGToDAG.cpp =================================================================== --- lib/Target/X86/X86ISelDAGToDAG.cpp +++ lib/Target/X86/X86ISelDAGToDAG.cpp @@ -654,7 +654,7 @@ /// Emit any code that needs to be executed only in the main function. void X86DAGToDAGISel::emitSpecialCodeForMain() { - if (Subtarget->isTargetCygMing()) { + if (Subtarget->isTargetMidiCygMing()) { TargetLowering::ArgListTy Args; auto &DL = CurDAG->getDataLayout(); Index: lib/Target/X86/X86ISelLowering.cpp =================================================================== --- lib/Target/X86/X86ISelLowering.cpp +++ lib/Target/X86/X86ISelLowering.cpp @@ -458,7 +458,7 @@ // FIXME - use subtarget debug flags if (!Subtarget.isTargetDarwin() && !Subtarget.isTargetELF() && - !Subtarget.isTargetCygMing() && !Subtarget.isTargetWin64() && + !Subtarget.isTargetMidiCygMing() && !Subtarget.isTargetWin64() && TM.Options.ExceptionModel != ExceptionHandling::SjLj) { setOperationAction(ISD::EH_LABEL, MVT::Other, Expand); } @@ -2822,7 +2822,7 @@ const Function *Fn = MF.getFunction(); if (Fn->hasExternalLinkage() && - Subtarget.isTargetCygMing() && + Subtarget.isTargetMidiCygMing() && Fn->getName() == "main") FuncInfo->setForceFramePointer(true); Index: lib/Target/X86/X86Subtarget.h =================================================================== --- lib/Target/X86/X86Subtarget.h +++ lib/Target/X86/X86Subtarget.h @@ -544,7 +544,7 @@ return TargetTriple.isWindowsItaniumEnvironment(); } - bool isTargetCygMing() const { return TargetTriple.isOSCygMing(); } + bool isTargetMidiCygMing() const { return TargetTriple.isOSMidiCygMing(); } bool isOSWindows() const { return TargetTriple.isOSWindows(); } @@ -553,7 +553,7 @@ } bool isTargetWin32() const { - return !In64BitMode && (isTargetCygMing() || isTargetKnownWindowsMSVC()); + return !In64BitMode && (isTargetMidiCygMing() || isTargetKnownWindowsMSVC()); } bool isPICStyleGOT() const { return PICStyle == PICStyles::GOT; } Index: tools/lli/lli.cpp =================================================================== --- tools/lli/lli.cpp +++ tools/lli/lli.cpp @@ -536,7 +536,7 @@ // If the target is Cygwin/MingW and we are generating remote code, we // need an extra module to help out with linking. - if (RemoteMCJIT && Triple(Mod->getTargetTriple()).isOSCygMing()) { + if (RemoteMCJIT && Triple(Mod->getTargetTriple()).isOSMidiCygMing()) { addCygMingExtraModule(*EE, Context, Mod->getTargetTriple()); } Index: tools/llvm-config/llvm-config.cpp =================================================================== --- tools/llvm-config/llvm-config.cpp +++ tools/llvm-config/llvm-config.cpp @@ -352,7 +352,7 @@ if (HostTriple.isOSWindows()) { SharedExt = "dll"; SharedVersionedExt = LLVM_DYLIB_VERSION ".dll"; - if (HostTriple.isOSCygMing()) { + if (HostTriple.isOSMidiCygMing()) { StaticExt = "a"; StaticPrefix = "lib"; } else {