<div dir="ltr">Merged to 6.0 in r323852.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 30, 2018 at 8:50 PM, Martin Storsjo via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: mstorsjo<br>
Date: Tue Jan 30 11:50:51 2018<br>
New Revision: 323810<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=323810&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=323810&view=rev</a><br>
Log:<br>
[AArch64] Properly handle dllimport of variables when using fast-isel<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D42567" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D42567</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/Target/AArch64/<wbr>AArch64FastISel.cpp<br>
    llvm/trunk/lib/Target/AArch64/<wbr>AArch64Subtarget.cpp<br>
    llvm/trunk/test/CodeGen/<wbr>AArch64/dllimport.ll<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/<wbr>AArch64FastISel.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64FastISel.cpp?rev=323810&r1=323809&r2=323810&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>AArch64/AArch64FastISel.cpp?<wbr>rev=323810&r1=323809&r2=<wbr>323810&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/AArch64/<wbr>AArch64FastISel.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/<wbr>AArch64FastISel.cpp Tue Jan 30 11:50:51 2018<br>
@@ -476,26 +476,27 @@ unsigned AArch64FastISel::<wbr>materializeGV(<br>
     // ADRP + LDRX<br>
     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AArch64::ADRP),<br>
             ADRPReg)<br>
-      .addGlobalAddress(GV, 0, AArch64II::MO_GOT | AArch64II::MO_PAGE);<br>
+        .addGlobalAddress(GV, 0, AArch64II::MO_PAGE | OpFlags);<br>
<br>
     ResultReg = createResultReg(&AArch64::<wbr>GPR64RegClass);<br>
     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AArch64::LDRXui),<br>
             ResultReg)<br>
-      .addReg(ADRPReg)<br>
-      .addGlobalAddress(GV, 0, AArch64II::MO_GOT | AArch64II::MO_PAGEOFF |<br>
-                        AArch64II::MO_NC);<br>
+        .addReg(ADRPReg)<br>
+        .addGlobalAddress(GV, 0,<br>
+                          AArch64II::MO_PAGEOFF | AArch64II::MO_NC | OpFlags);<br>
   } else {<br>
     // ADRP + ADDX<br>
     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AArch64::ADRP),<br>
             ADRPReg)<br>
-      .addGlobalAddress(GV, 0, AArch64II::MO_PAGE);<br>
+        .addGlobalAddress(GV, 0, AArch64II::MO_PAGE | OpFlags);<br>
<br>
     ResultReg = createResultReg(&AArch64::<wbr>GPR64spRegClass);<br>
     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AArch64::ADDXri),<br>
             ResultReg)<br>
-      .addReg(ADRPReg)<br>
-      .addGlobalAddress(GV, 0, AArch64II::MO_PAGEOFF | AArch64II::MO_NC)<br>
-      .addImm(0);<br>
+        .addReg(ADRPReg)<br>
+        .addGlobalAddress(GV, 0,<br>
+                          AArch64II::MO_PAGEOFF | AArch64II::MO_NC | OpFlags)<br>
+        .addImm(0);<br>
   }<br>
   return ResultReg;<br>
 }<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/<wbr>AArch64Subtarget.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp?rev=323810&r1=323809&r2=323810&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>AArch64/AArch64Subtarget.cpp?<wbr>rev=323810&r1=323809&r2=<wbr>323810&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/AArch64/<wbr>AArch64Subtarget.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/<wbr>AArch64Subtarget.cpp Tue Jan 30 11:50:51 2018<br>
@@ -195,15 +195,18 @@ AArch64Subtarget::<wbr>ClassifyGlobalReferenc<br>
   if (TM.getCodeModel() == CodeModel::Large && isTargetMachO())<br>
     return AArch64II::MO_GOT;<br>
<br>
+  unsigned Flags = GV->hasDLLImportStorageClass() ? AArch64II::MO_DLLIMPORT<br>
+                                                  : AArch64II::MO_NO_FLAG;<br>
+<br>
   if (!TM.shouldAssumeDSOLocal(*GV-<wbr>>getParent(), GV))<br>
-    return AArch64II::MO_GOT;<br>
+    return AArch64II::MO_GOT | Flags;<br>
<br>
   // The small code model's direct accesses use ADRP, which cannot<br>
   // necessarily produce the value 0 (if the code is above 4GB).<br>
   if (useSmallAddressing() && GV->hasExternalWeakLinkage())<br>
-    return AArch64II::MO_GOT;<br>
+    return AArch64II::MO_GOT | Flags;<br>
<br>
-  return AArch64II::MO_NO_FLAG;<br>
+  return Flags;<br>
 }<br>
<br>
 unsigned char AArch64Subtarget::<wbr>classifyGlobalFunctionReferenc<wbr>e(<br>
<br>
Modified: llvm/trunk/test/CodeGen/<wbr>AArch64/dllimport.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/dllimport.ll?rev=323810&r1=323809&r2=323810&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/AArch64/dllimport.ll?<wbr>rev=323810&r1=323809&r2=<wbr>323810&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>AArch64/dllimport.ll (original)<br>
+++ llvm/trunk/test/CodeGen/<wbr>AArch64/dllimport.ll Tue Jan 30 11:50:51 2018<br>
@@ -1,4 +1,5 @@<br>
-; RUN: llc -mtriple aarch64-unknown-windows-msvc -filetype asm -o - %s | FileCheck %s<br>
+; RUN: llc -mtriple aarch64-unknown-windows-msvc -filetype asm -o - %s | FileCheck %s -check-prefixes=CHECK,DAG-ISEL<br>
+; RUN: llc -mtriple aarch64-unknown-windows-msvc -fast-isel -filetype asm -o - %s | FileCheck %s -check-prefixes=CHECK,FAST-<wbr>ISEL<br>
<br>
 @var = external dllimport global i32<br>
 @ext = external global i32<br>
@@ -23,7 +24,9 @@ define i32 @get_ext() {<br>
<br>
 ; CHECK-LABEL: get_ext<br>
 ; CHECK: adrp x8, ext<br>
-; CHECK: ldr w0, [x8, ext]<br>
+; DAG-ISEL: ldr w0, [x8, ext]<br>
+; FAST-ISEL: add x8, x8, ext<br>
+; FAST-ISEL: ldr w0, [x8]<br>
 ; CHECK: ret<br>
<br>
 define i32* @get_var_pointer() {<br>
@@ -31,8 +34,8 @@ define i32* @get_var_pointer() {<br>
 }<br>
<br>
 ; CHECK-LABEL: get_var_pointer<br>
-; CHECK: adrp x0, __imp_var<br>
-; CHECK: ldr x0, [x0, __imp_var]<br>
+; CHECK: adrp [[REG1:x[0-9]+]], __imp_var<br>
+; CHECK: ldr {{x[0-9]+}}, {{\[}}[[REG1]], __imp_var]<br>
 ; CHECK: ret<br>
<br>
 define i32 @call_external() {<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>