[llvm] r369610 - [COFF] Fix section name for constants larger than 64 bits on Windows

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 21 18:48:34 PDT 2019


Author: maskray
Date: Wed Aug 21 18:48:34 2019
New Revision: 369610

URL: http://llvm.org/viewvc/llvm-project?rev=369610&view=rev
Log:
[COFF] Fix section name for constants larger than 64 bits on Windows

APIntToHexString returns wrong value ("0000000000000000ffffffffffffffff")
for integer larger than 64 bits, and thus
TargetLoweringObjectFileCOFF::getSectionForConstant returns same section name
for all numbers larger than 64 bits. This patch tries to fix it.

Differential Revision: https://reviews.llvm.org/D66458
Patch by Senran Zhang

Added:
    llvm/trunk/test/CodeGen/X86/coff-fp-section-name.ll
Modified:
    llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Modified: llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp?rev=369610&r1=369609&r2=369610&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
+++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Wed Aug 21 18:48:34 2019
@@ -1597,7 +1597,8 @@ const MCExpr *TargetLoweringObjectFileCO
 
 static std::string APIntToHexString(const APInt &AI) {
   unsigned Width = (AI.getBitWidth() / 8) * 2;
-  std::string HexString = utohexstr(AI.getLimitedValue(), /*LowerCase=*/true);
+  std::string HexString = AI.toString(16, /*Signed=*/false);
+  transform(HexString.begin(), HexString.end(), HexString.begin(), tolower);
   unsigned Size = HexString.size();
   assert(Width >= Size && "hex string is too large!");
   HexString.insert(HexString.begin(), Width - Size, '0');

Added: llvm/trunk/test/CodeGen/X86/coff-fp-section-name.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/coff-fp-section-name.ll?rev=369610&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/coff-fp-section-name.ll (added)
+++ llvm/trunk/test/CodeGen/X86/coff-fp-section-name.ll Wed Aug 21 18:48:34 2019
@@ -0,0 +1,97 @@
+; RUN: llc -O0 < %s | FileCheck %s
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define dso_local i32 @main() #0 {
+entry:
+  %retval = alloca i32, align 4
+  %a = alloca fp128, align 16
+  %b = alloca fp128, align 16
+  %c = alloca fp128, align 16
+  %d = alloca fp128, align 16
+  %e = alloca fp128, align 16
+  %f = alloca fp128, align 16
+  %g = alloca fp128, align 16
+  %h = alloca float, align 4
+  %i = alloca float, align 4
+  %j = alloca float, align 4
+  %k = alloca float, align 4
+  %l = alloca double, align 8
+  %m = alloca double, align 8
+  %n = alloca double, align 8
+  %o = alloca double, align 8
+  store i32 0, i32* %retval, align 4
+
+  store fp128 0xLBB2C11D0AE2E087D73E717A35985531C, fp128* %a, align 16
+  store fp128 0xLBB2C11D0AE2E087D73E717A35985531C, fp128* %b, align 16
+  store fp128 0xL00000000000000004002000000000000, fp128* %c, align 16
+  store fp128 0xL00000000000000007FFF800000000000, fp128* %d, align 16
+  store fp128 0xL00000000000000007FFF000000000000, fp128* %e, align 16
+  store fp128 0xL00000000000000007FFF000000000000, fp128* %f, align 16
+  store fp128 0xL10000000000000003F66244CE242C556, fp128* %g, align 16
+  store float 0x3E212E0BE0000000, float* %h, align 4
+  store float 8.000000e+00, float* %i, align 4
+  store float 0x7FF8000000000000, float* %j, align 4
+  store float 0x7FF0000000000000, float* %k, align 4
+  store double 1.000000e+00, double* %l, align 8
+  store double 8.000000e+00, double* %m, align 8
+  store double 0x7FF8000000000000, double* %n, align 8
+  store double 0x7FF0000000000000, double* %o, align 8
+
+  ret i32 0
+}
+
+attributes #0 = { "target-features"="+mmx" }
+
+; %o
+; CHECK: .globl	__real at 7ff0000000000000
+; CHECK: .section	.rdata,"dr",discard,__real at 7ff0000000000000
+
+; %n
+; CHECK: .globl	__real at 7ff8000000000000
+; CHECK: .section	.rdata,"dr",discard,__real at 7ff8000000000000
+
+; %m
+; CHECK: .globl	__real at 4020000000000000
+; CHECK: .section	.rdata,"dr",discard,__real at 4020000000000000
+
+; %l
+; CHECK: .globl	__real at 3ff0000000000000
+; CHECK: .section	.rdata,"dr",discard,__real at 3ff0000000000000
+
+; %j
+; CHECK: .globl	__real at 7f800000
+; CHECK: .section	.rdata,"dr",discard,__real at 7f800000
+
+; %k
+; CHECK: .globl	__real at 7fc00000
+; CHECK: .section	.rdata,"dr",discard,__real at 7fc00000
+
+; %i
+; CHECK: .globl	__real at 41000000
+; CHECK: .section	.rdata,"dr",discard,__real at 41000000
+
+; %h
+; CHECK: .globl	__real at 3109705f
+; CHECK: .section	.rdata,"dr",discard,__real at 3109705f
+
+; %a, %b
+; CHECK: .globl	__xmm at 73e717a35985531cbb2c11d0ae2e087d
+; CHECK: .section	.rdata,"dr",discard,__xmm at 73e717a35985531cbb2c11d0ae2e087d
+
+; %c
+; CHECK: .globl	__xmm at 40020000000000000000000000000000
+; CHECK: .section	.rdata,"dr",discard,__xmm at 40020000000000000000000000000000
+
+; %d
+; CHECK: .globl	__xmm at 7fff8000000000000000000000000000
+; CHECK: .section	.rdata,"dr",discard,__xmm at 7fff8000000000000000000000000000
+
+; %e, %f
+; CHECK: .globl	__xmm at 7fff0000000000000000000000000000
+; CHECK: .section	.rdata,"dr",discard,__xmm at 7fff0000000000000000000000000000
+
+; %g
+; CHECK: .globl	__xmm at 3f66244ce242c5561000000000000000
+; CHECK: .section	.rdata,"dr",discard,__xmm at 3f66244ce242c5561000000000000000




More information about the llvm-commits mailing list