[llvm] [Cygwin] Cygwin X86ISelDAGToDAG.cpp (PR #76284)

εΎζŒζ’ Xu Chiheng via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 31 12:30:53 PST 2023


https://github.com/xu-chiheng updated https://github.com/llvm/llvm-project/pull/76284

>From 7ae92c6f21bca776fcbef2ba8adfb339f1d4e6a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?=
 <chiheng.xu at gmail.com>
Date: Sun, 24 Dec 2023 02:47:50 +0800
Subject: [PATCH 1/2] 1

---
 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
index 77a997588c4fee..9ee5ea55903627 100644
--- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
@@ -2944,6 +2944,18 @@ bool X86DAGToDAGISel::selectMOV64Imm32(SDValue N, SDValue &Imm) {
     return false;
 
   Imm = N;
+  if (Subtarget->isTargetWindowsCygwin() && Subtarget->isTargetWin64()) {
+    if (N->getOpcode() != ISD::TargetGlobalAddress)
+      return TM.getCodeModel() == CodeModel::Small;
+
+    std::optional<ConstantRange> CR =
+      cast<GlobalAddressSDNode>(N)->getGlobal()->getAbsoluteSymbolRange();
+    if (!CR)
+      return TM.getCodeModel() == CodeModel::Small;
+
+    return CR->getUnsignedMax().ult(1ull << 32);
+  }
+
   // Small/medium code model can reference non-TargetGlobalAddress objects with
   // 32 bit constants.
   if (N->getOpcode() != ISD::TargetGlobalAddress) {

>From c696f581cdaef844c95639f0c714149097525979 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?=
 <chiheng.xu at gmail.com>
Date: Sun, 24 Dec 2023 03:00:34 +0800
Subject: [PATCH 2/2] 1

---
 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
index 9ee5ea55903627..ef8981f0e7e357 100644
--- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
@@ -2949,7 +2949,7 @@ bool X86DAGToDAGISel::selectMOV64Imm32(SDValue N, SDValue &Imm) {
       return TM.getCodeModel() == CodeModel::Small;
 
     std::optional<ConstantRange> CR =
-      cast<GlobalAddressSDNode>(N)->getGlobal()->getAbsoluteSymbolRange();
+        cast<GlobalAddressSDNode>(N)->getGlobal()->getAbsoluteSymbolRange();
     if (!CR)
       return TM.getCodeModel() == CodeModel::Small;
 



More information about the llvm-commits mailing list