Revert "[COFF] Use comdat shared constants for MinGW as well"
authorMartin Storsjo <martin@martin.st>
Thu, 26 Jul 2018 10:48:20 +0000 (10:48 +0000)
committerMartin Storsjo <martin@martin.st>
Thu, 26 Jul 2018 10:48:20 +0000 (10:48 +0000)
commit9dafd6f6d93ca67f63c09aa091b28ddf88ddfc14
treea2f14c53c1e849702c27d0b31cc051bc8662bcdd
parentbea258d3d7ce297807671d493619065a68366347
Revert "[COFF] Use comdat shared constants for MinGW as well"

This reverts commit r337951.

While that kind of shared constant generally works fine in a MinGW
setting, it broke some cases of inline assembly that worked before:

$ cat const-asm.c
int MULH(int a, int b) {
    int rt, dummy;
    __asm__ (
        "imull %3"
        :"=d"(rt), "=a"(dummy)
        :"a"(a), "rm"(b)
    );
    return rt;
}
int func(int a) {
    return MULH(a, 1);
}
$ clang -target x86_64-win32-gnu -c const-asm.c -O2
const-asm.c:4:9: error: invalid variant '00000001'
        "imull %3"
        ^
<inline asm>:1:15: note: instantiated into assembly here
        imull __real@00000001(%rip)
                     ^

A similar error is produced for i686 as well. The same test with a
target of x86_64-win32-msvc or i686-win32-msvc works fine.

llvm-svn: 338018
llvm/include/llvm/MC/MCAsmInfo.h
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm/lib/MC/MCAsmInfoCOFF.cpp
llvm/test/CodeGen/AArch64/win_cst_pool.ll
llvm/test/CodeGen/X86/win_cst_pool.ll