<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>