Index: include/llvm/MC/MCAsmInfo.h =================================================================== --- include/llvm/MC/MCAsmInfo.h +++ include/llvm/MC/MCAsmInfo.h @@ -89,10 +89,6 @@ /// them. bool HasCOFFAssociativeComdats = false; - /// True if this is a non-GNU COFF target. For GNU targets, we don't generate - /// constants into comdat sections. - bool HasCOFFComdatConstants = false; - /// This is the maximum possible length of an instruction, which is needed to /// compute the size of an inline asm. Defaults to 4. unsigned MaxInstLength = 4; @@ -473,7 +469,6 @@ bool hasMachoZeroFillDirective() const { return HasMachoZeroFillDirective; } bool hasMachoTBSSDirective() const { return HasMachoTBSSDirective; } bool hasCOFFAssociativeComdats() const { return HasCOFFAssociativeComdats; } - bool hasCOFFComdatConstants() const { return HasCOFFComdatConstants; } unsigned getMaxInstLength() const { return MaxInstLength; } unsigned getMinInstAlignment() const { return MinInstAlignment; } bool getDollarIsPC() const { return DollarIsPC; } Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp =================================================================== --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -2664,7 +2664,7 @@ /// GetCPISymbol - Return the symbol for the specified constant pool entry. MCSymbol *AsmPrinter::GetCPISymbol(unsigned CPID) const { - if (getSubtargetInfo().getTargetTriple().isKnownWindowsMSVCEnvironment()) { + if (getSubtargetInfo().getTargetTriple().isOSWindows()) { const MachineConstantPoolEntry &CPE = MF->getConstantPool()->getConstants()[CPID]; if (!CPE.isMachineConstantPoolEntry() && CPE.getType() && Index: lib/CodeGen/TargetLoweringObjectFileImpl.cpp =================================================================== --- lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1396,12 +1396,7 @@ MCSection *TargetLoweringObjectFileCOFF::getSectionForConstant( const DataLayout &DL, SectionKind Kind, const Constant *C, unsigned &Align) const { - if (Kind.isMergeableConst() && C && - getContext().getAsmInfo()->hasCOFFComdatConstants()) { - // This creates comdat sections with the given symbol name, but unless - // AsmPrinter::GetCPISymbol actually makes the symbol global, the symbol - // will be created with a null storage class, which makes GNU binutils - // error out. + if (Kind.isMergeableConst() && C) { const unsigned Characteristics = COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_LNK_COMDAT; Index: lib/MC/MCAsmInfoCOFF.cpp =================================================================== --- lib/MC/MCAsmInfoCOFF.cpp +++ lib/MC/MCAsmInfoCOFF.cpp @@ -45,11 +45,6 @@ // If this is a COFF target, assume that it supports associative comdats. It's // part of the spec. HasCOFFAssociativeComdats = true; - - // We can generate constants in comdat sections that can be shared, - // but in order not to create null typed symbols, we actually need to - // make them global symbols as well. - HasCOFFComdatConstants = true; } void MCAsmInfoMicrosoft::anchor() {} @@ -63,7 +58,4 @@ // comdats for jump tables, unwind information, and other data associated with // a function. HasCOFFAssociativeComdats = false; - - // We don't create constants in comdat sections for MinGW. - HasCOFFComdatConstants = false; } Index: test/CodeGen/AArch64/win_cst_pool.ll =================================================================== --- test/CodeGen/AArch64/win_cst_pool.ll +++ test/CodeGen/AArch64/win_cst_pool.ll @@ -1,5 +1,5 @@ ; RUN: llc < %s -mtriple=aarch64-win32-msvc | FileCheck %s -; RUN: llc < %s -mtriple=aarch64-win32-gnu | FileCheck -check-prefix=MINGW %s +; RUN: llc < %s -mtriple=aarch64-win32-gnu | FileCheck %s define double @double() { ret double 0x0000000000800000 @@ -13,12 +13,3 @@ ; CHECK: adrp x8, __real@0000000000800000 ; CHECK-NEXT: ldr d0, [x8, __real@0000000000800000] ; CHECK-NEXT: ret - -; MINGW: .section .rdata,"dr" -; MINGW-NEXT: .p2align 3 -; MINGW-NEXT: [[LABEL:\.LC.*]]: -; MINGW-NEXT: .xword 8388608 -; MINGW: double: -; MINGW: adrp x8, [[LABEL]] -; MINGW-NEXT: ldr d0, [x8, [[LABEL]]] -; MINGW-NEXT: ret Index: test/CodeGen/X86/win_cst_pool.ll =================================================================== --- test/CodeGen/X86/win_cst_pool.ll +++ test/CodeGen/X86/win_cst_pool.ll @@ -1,5 +1,5 @@ ; RUN: llc < %s -mtriple=x86_64-win32 -mattr=sse2 -mattr=avx | FileCheck %s -; RUN: llc < %s -mtriple=x86_64-win32-gnu -mattr=sse2 -mattr=avx | FileCheck -check-prefix=MINGW %s +; RUN: llc < %s -mtriple=x86_64-win32-gnu -mattr=sse2 -mattr=avx | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc" @@ -15,14 +15,6 @@ ; CHECK: movsd __real@0000000000800000(%rip), %xmm0 ; CHECK-NEXT: ret -; MINGW: .section .rdata,"dr" -; MINGW-NEXT: .p2align 3 -; MINGW-NEXT: [[LABEL:\.LC.*]]: -; MINGW-NEXT: .quad 8388608 -; MINGW: double: -; MINGW: movsd [[LABEL]](%rip), %xmm0 -; MINGW-NEXT: ret - define <4 x i32> @vec1() { ret <4 x i32> }