[llvm] r205338 - isTargetWindows() renamed to isTargetKnownWindowsMSVC()
Yaron Keren
yaron.keren at gmail.com
Tue Apr 1 22:48:54 PDT 2014
Is the UnknownEnvironment actually used to produce code, a real target or a
default value when the environment was not provided? If the later we can
make the MSVC environment the default and get rid of UnknownEnvironment
Triple::MinGW should not exists anymore, yes. It's a bit tricky since
Triple::normalize first parses the string and then normalizes, so in
between a MinGW OS does exist.
2014-04-02 8:34 GMT+03:00 Saleem Abdulrasool <compnerd at compnerd.org>:
> On Tue, Apr 1, 2014 at 9:52 PM, Yaron Keren <yaron.keren at gmail.com> wrote:
>
>> Hi,
>>
>> I had added/modified four functions corresponding exactly to the ones in
>> Triple.h in r205393 to avoid confusion.
>>
>> However, this is not completely clear. You are highlighting a very
>> important issue here.
>>
>> You listed the four environments
>>
>> * MSVC: The MS ABI, MSVCRT environment as defined by Microsoft
>> * GNU: The MinGW32/MinGW32-W64 environment which uses MSVCRT and
>> auxiliary libraries
>> * Itanium: The MSVCRT environment + libc++ built with Itanium ABI
>> * Cygnus: The Cygwin environment which uses custom libraries for
>> everything
>>
>> but there is a fifth one, the UnknownEnvironment.
>>
>
> Correct, the fifth element is tricky. It is the reason that the original
> set of changes for the Windows target triples introduced
> isKnownWindowsMSVCEnvironment() and isWindowsMSVCEnvironment(). The
> difference is that the unknown environment is the default environment and
> needed to be handled for the cross-over to the canonicalised triples.
> i686-pc-win32 maps to an unknown environment (which is supposed to be
> handled as if it were the MSVC environment).
>
>
>> I have no idea what is the UnknownEnvironment on Windows but it's actually
>> being used by isWindowsMSVCEnvironment() called in several places in the
>> code. OTOH, The Itanium environment is actually used just in one
>> location, InitHeaderSearch.cpp.
>>
>
> The Itanium environment is not fully fleshed out yet (it is meant for use
> for the Windows on ARM work that is currently ongoing).
>
>
>> The UnknownEnvironment may have been used in the past instead of the
>> generic Itanium environment?
>>
>
> No, the Itanium environment is recently introduced into the LLVM
> repositories.
>
>
>> If so, the usage of Unknown enviroment on WIndows should be replaced
>> with the Itanium enviroment, and the corresponding functions both in
>> Triple.h and X86Subtarget.h renamed and modified accordingly?
>>
>> What do you think?
>>
>
> If we can find all the locations that the UnknownEnvironment crops up
> handle it properly, that would certainly be ideal. If it can be removed at
> all sites, we would also be able to remove the
> isKnownWindowsMSVCEnvironment in favour of isWindowsMSVCEnvironment as well.
>
> I believe that the dust has somewhat settled from the triple
> canonicalisation changes, and I hope to actually get around to cleaning up
> some of the vestiges of the old triple handling for the various Windows
> environments (e.g. removal of MinGW32 from OS). I can try to see if it is
> possible to now sweep up the unknown environment as well.
>
>
>> Yaron
>>
>>
>>
>>
>>
>>
>> 2014-04-02 4:22 GMT+03:00 Saleem Abdulrasool <compnerd at compnerd.org>:
>>
>> On Tue, Apr 1, 2014 at 11:15 AM, Yaron Keren <yaron.keren at gmail.com>wrote:
>>>
>>>> Author: yrnkrn
>>>> Date: Tue Apr 1 13:15:34 2014
>>>> New Revision: 205338
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=205338&view=rev
>>>> Log:
>>>> isTargetWindows() renamed to isTargetKnownWindowsMSVC()
>>>> to reflect its current functionality.
>>>>
>>>
>>> The OS is still Windows. If you are going to split up the subtarget
>>> into the respective environments, then you should have the following at the
>>> very least:
>>>
>>> isTargetWindowsMSVC
>>> isTargetWindowsGNU
>>> isTargetWindowsCygnus
>>> isTargetWindowsItanium
>>>
>>>
>>>> Based on Takumi NAKAMURA suggestion.
>>>>
>>>>
>>>> Modified:
>>>> llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
>>>> llvm/trunk/lib/Target/X86/X86FastISel.cpp
>>>> llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>>>> llvm/trunk/lib/Target/X86/X86ISelLowering.h
>>>> llvm/trunk/lib/Target/X86/X86Subtarget.h
>>>> llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp?rev=205338&r1=205337&r2=205338&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp Tue Apr 1 13:15:34 2014
>>>> @@ -623,7 +623,7 @@ void X86AsmPrinter::EmitEndOfAsmFile(Mod
>>>> OutStreamer.EmitAssemblerFlag(MCAF_SubsectionsViaSymbols);
>>>> }
>>>>
>>>> - if (Subtarget->isTargetWindows() && !Subtarget->isTargetCygMing() &&
>>>> + if (Subtarget->isTargetKnownWindowsMSVC() &&
>>>> !Subtarget->isTargetCygMing() &&
>>>> MMI->usesVAFloatArgument()) {
>>>> StringRef SymbolName = Subtarget->is64Bit() ? "_fltused" :
>>>> "__fltused";
>>>> MCSymbol *S = MMI->getContext().GetOrCreateSymbol(SymbolName);
>>>> @@ -681,12 +681,12 @@ void X86AsmPrinter::EmitEndOfAsmFile(Mod
>>>> OutStreamer.SwitchSection(TLOFCOFF.getDrectveSection());
>>>> SmallString<128> name;
>>>> for (unsigned i = 0, e = DLLExportedGlobals.size(); i != e; ++i)
>>>> {
>>>> - if (Subtarget->isTargetWindows())
>>>> + if (Subtarget->isTargetKnownWindowsMSVC())
>>>> name = " /EXPORT:";
>>>> else
>>>> name = " -export:";
>>>> name += DLLExportedGlobals[i]->getName();
>>>> - if (Subtarget->isTargetWindows())
>>>> + if (Subtarget->isTargetKnownWindowsMSVC())
>>>> name += ",DATA";
>>>> else
>>>> name += ",data";
>>>> @@ -694,7 +694,7 @@ void X86AsmPrinter::EmitEndOfAsmFile(Mod
>>>> }
>>>>
>>>> for (unsigned i = 0, e = DLLExportedFns.size(); i != e; ++i) {
>>>> - if (Subtarget->isTargetWindows())
>>>> + if (Subtarget->isTargetKnownWindowsMSVC())
>>>> name = " /EXPORT:";
>>>> else
>>>> name = " -export:";
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86FastISel.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FastISel.cpp?rev=205338&r1=205337&r2=205338&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/X86/X86FastISel.cpp (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86FastISel.cpp Tue Apr 1 13:15:34 2014
>>>> @@ -876,7 +876,7 @@ bool X86FastISel::X86SelectRet(const Ins
>>>> // a virtual register in the entry block, so now we copy the value
>>>> out
>>>> // and into %rax. We also do the same with %eax for Win32.
>>>> if (F.hasStructRetAttr() &&
>>>> - (Subtarget->is64Bit() || Subtarget->isTargetWindows())) {
>>>> + (Subtarget->is64Bit() || Subtarget->isTargetKnownWindowsMSVC()))
>>>> {
>>>> unsigned Reg = X86MFInfo->getSRetReturnReg();
>>>> assert(Reg &&
>>>> "SRetReturnReg should have been set in
>>>> LowerFormalArguments()!");
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=205338&r1=205337&r2=205338&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Apr 1 13:15:34
>>>> 2014
>>>> @@ -189,7 +189,7 @@ static TargetLoweringObjectFile *createT
>>>> return new X86LinuxTargetObjectFile();
>>>> if (Subtarget->isTargetELF())
>>>> return new TargetLoweringObjectFileELF();
>>>> - if (Subtarget->isTargetWindows())
>>>> + if (Subtarget->isTargetKnownWindowsMSVC())
>>>> return new X86WindowsTargetObjectFile();
>>>> if (Subtarget->isTargetCOFF())
>>>> return new TargetLoweringObjectFileCOFF();
>>>> @@ -250,7 +250,7 @@ void X86TargetLowering::resetOperationAc
>>>> addBypassSlowDiv(64, 16);
>>>> }
>>>>
>>>> - if (Subtarget->isTargetWindows() && !Subtarget->isTargetCygMing()) {
>>>> + if (Subtarget->isTargetKnownWindowsMSVC() &&
>>>> !Subtarget->isTargetCygMing()) {
>>>> // Setup Windows compiler runtime calls.
>>>> setLibcallName(RTLIB::SDIV_I64, "_alldiv");
>>>> setLibcallName(RTLIB::UDIV_I64, "_aulldiv");
>>>> @@ -1906,7 +1906,7 @@ X86TargetLowering::LowerReturn(SDValue C
>>>> // We saved the argument into a virtual register in the entry block,
>>>> // so now we copy the value out and into %rax/%eax.
>>>> if (DAG.getMachineFunction().getFunction()->hasStructRetAttr() &&
>>>> - (Subtarget->is64Bit() || Subtarget->isTargetWindows())) {
>>>> + (Subtarget->is64Bit() || Subtarget->isTargetKnownWindowsMSVC()))
>>>> {
>>>> MachineFunction &MF = DAG.getMachineFunction();
>>>> X86MachineFunctionInfo *FuncInfo =
>>>> MF.getInfo<X86MachineFunctionInfo>();
>>>> unsigned Reg = FuncInfo->getSRetReturnReg();
>>>> @@ -2291,7 +2291,7 @@ X86TargetLowering::LowerFormalArguments(
>>>> // Save the argument into a virtual register so that we can access it
>>>> // from the return points.
>>>> if (MF.getFunction()->hasStructRetAttr() &&
>>>> - (Subtarget->is64Bit() || Subtarget->isTargetWindows())) {
>>>> + (Subtarget->is64Bit() || Subtarget->isTargetKnownWindowsMSVC()))
>>>> {
>>>> X86MachineFunctionInfo *FuncInfo =
>>>> MF.getInfo<X86MachineFunctionInfo>();
>>>> unsigned Reg = FuncInfo->getSRetReturnReg();
>>>> if (!Reg) {
>>>> @@ -8494,7 +8494,7 @@ X86TargetLowering::LowerGlobalTLSAddress
>>>> Chain.getValue(1));
>>>> }
>>>>
>>>> - if (Subtarget->isTargetWindows() || Subtarget->isTargetMingw()) {
>>>> + if (Subtarget->isTargetKnownWindowsMSVC() ||
>>>> Subtarget->isTargetMingw()) {
>>>> // Just use the implicit TLS architecture
>>>> // Need to generate someting similar to:
>>>> // mov rdx, qword [gs:abs 58H]; Load pointer to
>>>> ThreadLocalStorage
>>>> @@ -15882,7 +15882,7 @@ X86TargetLowering::EmitLoweredWinAlloca(
>>>> }
>>>> } else {
>>>> const char *StackProbeSymbol =
>>>> - Subtarget->isTargetWindows() ? "_chkstk" : "_alloca";
>>>> + Subtarget->isTargetKnownWindowsMSVC() ? "_chkstk" : "_alloca";
>>>>
>>>> BuildMI(*BB, MI, DL, TII->get(X86::CALLpcrel32))
>>>> .addExternalSymbol(StackProbeSymbol)
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=205338&r1=205337&r2=205338&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Tue Apr 1 13:15:34 2014
>>>> @@ -756,7 +756,7 @@ namespace llvm {
>>>> /// isTargetFTOL - Return true if the target uses the MSVC _ftol2
>>>> routine
>>>> /// for fptoui.
>>>> bool isTargetFTOL() const {
>>>> - return Subtarget->isTargetWindows() && !Subtarget->is64Bit();
>>>> + return Subtarget->isTargetKnownWindowsMSVC() &&
>>>> !Subtarget->is64Bit();
>>>> }
>>>>
>>>> /// isIntegerTypeFTOL - Return true if the MSVC _ftol2 routine
>>>> should be
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=205338&r1=205337&r2=205338&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Tue Apr 1 13:15:34 2014
>>>> @@ -343,7 +343,7 @@ public:
>>>> bool isTargetNaCl() const { return TargetTriple.isOSNaCl(); }
>>>> bool isTargetNaCl32() const { return isTargetNaCl() && !is64Bit(); }
>>>> bool isTargetNaCl64() const { return isTargetNaCl() && is64Bit(); }
>>>> - bool isTargetWindows() const {
>>>> + bool isTargetKnownWindowsMSVC() const {
>>>> return TargetTriple.isKnownWindowsMSVCEnvironment();
>>>> }
>>>> bool isTargetMingw() const { return
>>>> TargetTriple.isWindowsGNUEnvironment(); }
>>>> @@ -359,7 +359,7 @@ public:
>>>> }
>>>>
>>>> bool isTargetWin32() const {
>>>> - return !In64BitMode && (isTargetCygMing() || isTargetWindows());
>>>> + return !In64BitMode && (isTargetCygMing() ||
>>>> isTargetKnownWindowsMSVC());
>>>> }
>>>>
>>>> bool isPICStyleSet() const { return PICStyle != PICStyles::None; }
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=205338&r1=205337&r2=205338&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Tue Apr 1 13:15:34
>>>> 2014
>>>> @@ -39,7 +39,7 @@ static std::string computeDataLayout(con
>>>> Ret += "-p:32:32";
>>>>
>>>> // Some ABIs align 64 bit integers and doubles to 64 bits, others to
>>>> 32.
>>>> - if (ST.is64Bit() || ST.isTargetCygMing() || ST.isTargetWindows() ||
>>>> + if (ST.is64Bit() || ST.isTargetCygMing() ||
>>>> ST.isTargetKnownWindowsMSVC() ||
>>>> ST.isTargetNaCl())
>>>> Ret += "-i64:64";
>>>> else
>>>> @@ -60,7 +60,7 @@ static std::string computeDataLayout(con
>>>> Ret += "-n8:16:32";
>>>>
>>>> // The stack is aligned to 32 bits on some ABIs and 128 bits on
>>>> others.
>>>> - if (!ST.is64Bit() && (ST.isTargetCygMing() || ST.isTargetWindows()))
>>>> + if (!ST.is64Bit() && (ST.isTargetCygMing() ||
>>>> ST.isTargetKnownWindowsMSVC()))
>>>> Ret += "-S32";
>>>> else
>>>> Ret += "-S128";
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>>
>>>
>>>
>>>
>>> --
>>> Saleem Abdulrasool
>>> compnerd (at) compnerd (dot) org
>>>
>>
>
>
> --
> Saleem Abdulrasool
> compnerd (at) compnerd (dot) org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140402/e8d3171d/attachment.html>
More information about the llvm-commits
mailing list