<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Fri, Mar 24, 2017 at 8:58 PM Yaxun Liu via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: yaxunl<br class="gmail_msg">
Date: Fri Mar 24 22:46:25 2017<br class="gmail_msg">
New Revision: 298767<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=298767&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=298767&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
[AMDGPU] Switch address space mapping by triple environment amdgiz<br class="gmail_msg">
<br class="gmail_msg">
For target environment amdgiz and amdgizcl (giz means Generic Is Zero), AMDGPU will use new address space mapping where generic address space is 0 and private address space is 5. The data layout is also changed correspondingly.<br class="gmail_msg">
<br class="gmail_msg">
Differential Revision: <a href="https://reviews.llvm.org/D31210" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D31210</a><br class="gmail_msg">
<br class="gmail_msg">
Added:<br class="gmail_msg">
    cfe/trunk/test/CodeGenOpenCL/<a href="http://amdgpu-env-amdgiz.cl" rel="noreferrer" class="gmail_msg" target="_blank">amdgpu-env-amdgiz.cl</a><br class="gmail_msg">
Modified:<br class="gmail_msg">
    cfe/trunk/lib/Basic/Targets.cpp<br class="gmail_msg">
<br class="gmail_msg">
Modified: cfe/trunk/lib/Basic/Targets.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=298767&r1=298766&r2=298767&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=298767&r1=298766&r2=298767&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- cfe/trunk/lib/Basic/Targets.cpp (original)<br class="gmail_msg">
+++ cfe/trunk/lib/Basic/Targets.cpp Fri Mar 24 22:46:25 2017<br class="gmail_msg">
@@ -2027,14 +2027,23 @@ ArrayRef<const char *> NVPTXTargetInfo::<br class="gmail_msg">
   return llvm::makeArrayRef(GCCRegNames);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
-static const unsigned AMDGPUAddrSpaceMap[] = {<br class="gmail_msg">
-  1,    // opencl_global<br class="gmail_msg">
-  3,    // opencl_local<br class="gmail_msg">
-  2,    // opencl_constant<br class="gmail_msg">
-  4,    // opencl_generic<br class="gmail_msg">
-  1,    // cuda_device<br class="gmail_msg">
-  2,    // cuda_constant<br class="gmail_msg">
-  3     // cuda_shared<br class="gmail_msg">
+static const LangAS::Map AMDGPUPrivateIsZeroMap = {<br class="gmail_msg">
+    1,  // opencl_global<br class="gmail_msg">
+    3,  // opencl_local<br class="gmail_msg">
+    2,  // opencl_constant<br class="gmail_msg">
+    4,  // opencl_generic<br class="gmail_msg">
+    1,  // cuda_device<br class="gmail_msg">
+    2,  // cuda_constant<br class="gmail_msg">
+    3   // cuda_shared<br class="gmail_msg">
+};<br class="gmail_msg">
+static const LangAS::Map AMDGPUGenericIsZeroMap = {<br class="gmail_msg">
+    1,  // opencl_global<br class="gmail_msg">
+    3,  // opencl_local<br class="gmail_msg">
+    4,  // opencl_constant<br class="gmail_msg">
+    0,  // opencl_generic<br class="gmail_msg">
+    1,  // cuda_device<br class="gmail_msg">
+    4,  // cuda_constant<br class="gmail_msg">
+    3   // cuda_shared<br class="gmail_msg">
 };<br class="gmail_msg">
<br class="gmail_msg">
 // If you edit the description strings, make sure you update<br class="gmail_msg">
@@ -2044,15 +2053,39 @@ static const char *const DataLayoutStrin<br class="gmail_msg">
   "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128"<br class="gmail_msg">
   "-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64";<br class="gmail_msg">
<br class="gmail_msg">
-static const char *const DataLayoutStringSI =<br class="gmail_msg">
+static const char *const DataLayoutStringSIPrivateIsZero =<br class="gmail_msg">
   "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32"<br class="gmail_msg">
   "-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128"<br class="gmail_msg">
   "-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64";<br class="gmail_msg">
<br class="gmail_msg">
+static const char *const DataLayoutStringSIGenericIsZero =<br class="gmail_msg">
+  "e-p:64:64-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32"<br class="gmail_msg">
+  "-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128"<br class="gmail_msg">
+  "-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64";<br class="gmail_msg">
+<br class="gmail_msg">
 class AMDGPUTargetInfo final : public TargetInfo {<br class="gmail_msg">
   static const Builtin::Info BuiltinInfo[];<br class="gmail_msg">
   static const char * const GCCRegNames[];<br class="gmail_msg">
<br class="gmail_msg">
+  struct AddrSpace {<br class="gmail_msg">
+    unsigned Generic, Global, Local, Constant, Private;<br class="gmail_msg">
+    AddrSpace(bool IsGenericZero_ = false){<br class="gmail_msg">
+      if (IsGenericZero_) {<br class="gmail_msg">
+        Generic   = 0;<br class="gmail_msg">
+        Global    = 1;<br class="gmail_msg">
+        Local     = 3;<br class="gmail_msg">
+        Constant  = 4;<br class="gmail_msg">
+        Private   = 5;<br class="gmail_msg">
+      } else {<br class="gmail_msg">
+        Generic   = 4;<br class="gmail_msg">
+        Global    = 1;<br class="gmail_msg">
+        Local     = 3;<br class="gmail_msg">
+        Constant  = 2;<br class="gmail_msg">
+        Private   = 0;<br class="gmail_msg">
+      }<br class="gmail_msg">
+    }<br class="gmail_msg">
+  };<br class="gmail_msg">
+<br class="gmail_msg">
   /// \brief The GPU profiles supported by the AMDGPU target.<br class="gmail_msg">
   enum GPUKind {<br class="gmail_msg">
     GK_NONE,<br class="gmail_msg">
@@ -2079,6 +2112,10 @@ class AMDGPUTargetInfo final : public Ta<br class="gmail_msg">
     return TT.getArch() == llvm::Triple::amdgcn;<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
+  static bool isGenericZero(const llvm::Triple &TT) {<br class="gmail_msg">
+    return TT.getEnvironmentName() == "amdgiz" ||<br class="gmail_msg">
+        TT.getEnvironmentName() == "amdgizcl";<br class="gmail_msg">
+  }<br class="gmail_msg">
 public:<br class="gmail_msg">
   AMDGPUTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)<br class="gmail_msg">
     : TargetInfo(Triple) ,<br class="gmail_msg">
@@ -2086,17 +2123,21 @@ public:<br class="gmail_msg">
       hasFP64(false),<br class="gmail_msg">
       hasFMAF(false),<br class="gmail_msg">
       hasLDEXPF(false),<br class="gmail_msg">
-      hasFullSpeedFP32Denorms(false){<br class="gmail_msg">
+      hasFullSpeedFP32Denorms(false),<br class="gmail_msg">
+      AS(isGenericZero(Triple)){<br class="gmail_msg">
     if (getTriple().getArch() == llvm::Triple::amdgcn) {<br class="gmail_msg">
       hasFP64 = true;<br class="gmail_msg">
       hasFMAF = true;<br class="gmail_msg">
       hasLDEXPF = true;<br class="gmail_msg">
     }<br class="gmail_msg">
-<br class="gmail_msg">
+    auto IsGenericZero = isGenericZero(Triple);<br class="gmail_msg">
     resetDataLayout(getTriple().getArch() == llvm::Triple::amdgcn ?<br class="gmail_msg">
-                    DataLayoutStringSI : DataLayoutStringR600);<br class="gmail_msg">
+                    (IsGenericZero ? DataLayoutStringSIGenericIsZero :<br class="gmail_msg">
+                        DataLayoutStringSIPrivateIsZero)<br class="gmail_msg">
+                    : DataLayoutStringR600);<br class="gmail_msg">
<br class="gmail_msg">
-    AddrSpaceMap = &AMDGPUAddrSpaceMap;<br class="gmail_msg">
+    AddrSpaceMap = IsGenericZero ? &AMDGPUGenericIsZeroMap :<br class="gmail_msg">
+        &AMDGPUPrivateIsZeroMap;<br class="gmail_msg">
     UseAddrSpaceMapMangling = true;<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
@@ -2104,14 +2145,10 @@ public:<br class="gmail_msg">
     if (GPU <= GK_CAYMAN)<br class="gmail_msg">
       return 32;<br class="gmail_msg">
<br class="gmail_msg">
-    switch(AddrSpace) {<br class="gmail_msg">
-      default:<br class="gmail_msg">
-        return 64;<br class="gmail_msg">
-      case 0:<br class="gmail_msg">
-      case 3:<br class="gmail_msg">
-      case 5:<br class="gmail_msg">
-        return 32;<br class="gmail_msg">
+    if (AddrSpace == AS.Private || AddrSpace == AS.Local) {<br class="gmail_msg">
+      return 32;<br class="gmail_msg">
     }<br class="gmail_msg">
+    return 64;<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
   uint64_t getMaxPointerWidth() const override {<br class="gmail_msg">
@@ -2304,12 +2341,13 @@ public:<br class="gmail_msg">
   /// DWARF.<br class="gmail_msg">
   Optional<unsigned> getDWARFAddressSpace(<br class="gmail_msg">
       unsigned AddressSpace) const override {<br class="gmail_msg">
-    switch (AddressSpace) {<br class="gmail_msg">
-    case 0: // LLVM Private.<br class="gmail_msg">
-      return 1; // DWARF Private.<br class="gmail_msg">
-    case 3: // LLVM Local.<br class="gmail_msg">
-      return 2; // DWARF Local.<br class="gmail_msg">
-    default:<br class="gmail_msg">
+    const unsigned DWARF_Private = 1;<br class="gmail_msg">
+    const unsigned DWARF_Local   = 2;<br class="gmail_msg">
+    if (AddressSpace == AS.Private) {<br class="gmail_msg">
+      return DWARF_Private;<br class="gmail_msg">
+    } else if (AddressSpace == AS.Local) {<br class="gmail_msg">
+      return DWARF_Local;<br class="gmail_msg">
+    } else {<br class="gmail_msg">
       return None;<br class="gmail_msg">
     }<br class="gmail_msg">
   }<br class="gmail_msg">
@@ -2330,6 +2368,8 @@ public:<br class="gmail_msg">
   uint64_t getNullPointerValue(unsigned AS) const override {<br class="gmail_msg">
     return AS == LangAS::opencl_local ? ~0 : 0;<br class="gmail_msg">
   }<br class="gmail_msg">
+<br class="gmail_msg">
+  const AddrSpace AS;<br class="gmail_msg"></blockquote><div><br></div><div>Is there some reason to have this:</div><div><br></div><div>a) At the end of the class,</div><div><br></div><div>and</div><div><br></div><div>b) public?</div><div><br></div><div>Thanks!</div><div><br></div><div>-eric</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 };<br class="gmail_msg">
<br class="gmail_msg">
 const Builtin::Info AMDGPUTargetInfo::BuiltinInfo[] = {<br class="gmail_msg">
<br class="gmail_msg">
Added: cfe/trunk/test/CodeGenOpenCL/<a href="http://amdgpu-env-amdgiz.cl" rel="noreferrer" class="gmail_msg" target="_blank">amdgpu-env-amdgiz.cl</a><br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/amdgpu-env-amdgiz.cl?rev=298767&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/amdgpu-env-amdgiz.cl?rev=298767&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- cfe/trunk/test/CodeGenOpenCL/<a href="http://amdgpu-env-amdgiz.cl" rel="noreferrer" class="gmail_msg" target="_blank">amdgpu-env-amdgiz.cl</a> (added)<br class="gmail_msg">
+++ cfe/trunk/test/CodeGenOpenCL/<a href="http://amdgpu-env-amdgiz.cl" rel="noreferrer" class="gmail_msg" target="_blank">amdgpu-env-amdgiz.cl</a> Fri Mar 24 22:46:25 2017<br class="gmail_msg">
@@ -0,0 +1,9 @@<br class="gmail_msg">
+// RUN: %clang_cc1 %s -O0 -triple amdgcn -emit-llvm -o - | FileCheck %s<br class="gmail_msg">
+// RUN: %clang_cc1 %s -O0 -triple amdgcn---opencl -emit-llvm -o - | FileCheck %s<br class="gmail_msg">
+// RUN: %clang_cc1 %s -O0 -triple amdgcn---amdgiz -emit-llvm -o - | FileCheck -check-prefix=GIZ %s<br class="gmail_msg">
+// RUN: %clang_cc1 %s -O0 -triple amdgcn---amdgizcl -emit-llvm -o - | FileCheck -check-prefix=GIZ %s<br class="gmail_msg">
+<br class="gmail_msg">
+// CHECK: target datalayout = "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64"<br class="gmail_msg">
+// GIZ: target datalayout = "e-p:64:64-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64"<br class="gmail_msg">
+void foo(void) {}<br class="gmail_msg">
+<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
cfe-commits mailing list<br class="gmail_msg">
<a href="mailto:cfe-commits@lists.llvm.org" class="gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="gmail_msg">
</blockquote></div></div>