Index: include/llvm/CodeGen/TargetLoweringObjectFileImpl.h =================================================================== --- include/llvm/CodeGen/TargetLoweringObjectFileImpl.h +++ include/llvm/CodeGen/TargetLoweringObjectFileImpl.h @@ -134,6 +134,8 @@ class TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile { mutable unsigned NextUniqueID = 0; + Triple TT; + public: ~TargetLoweringObjectFileCOFF() override = default; Index: lib/CodeGen/TargetLoweringObjectFileImpl.cpp =================================================================== --- lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1237,6 +1237,7 @@ COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_MEM_WRITE, SectionKind::getData()); } + TT = T; } static MCSectionCOFF *getCOFFStaticStructorSection(MCContext &Ctx, @@ -1350,6 +1351,11 @@ MCSection *TargetLoweringObjectFileCOFF::getSectionForConstant( const DataLayout &DL, SectionKind Kind, const Constant *C, unsigned &Align) const { + if (!TT.isKnownWindowsMSVCEnvironment() && + !TT.isWindowsItaniumEnvironment() && + !TT.isWindowsCoreCLREnvironment()) + return TargetLoweringObjectFile::getSectionForConstant(DL, Kind, C, Align); + if (Kind.isMergeableConst() && C) { const unsigned Characteristics = COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ | Index: test/CodeGen/X86/win_cst_pool.ll =================================================================== --- test/CodeGen/X86/win_cst_pool.ll +++ test/CodeGen/X86/win_cst_pool.ll @@ -1,4 +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 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc" @@ -14,6 +15,14 @@ ; 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> }