summaryrefslogtreecommitdiffstats
path: root/test/CodeGenCXX/amdgcn-string-literal.cpp
diff options
context:
space:
mode:
authorYaxun Liu <Yaxun.Liu@amd.com>2018-05-14 19:20:12 +0000
committerYaxun Liu <Yaxun.Liu@amd.com>2018-05-14 19:20:12 +0000
commit20ceb1b4d949a51ce2ea754880bd781746903c15 (patch)
tree31f14458aeeea213ec60ef189775bb5d3c1b6da8 /test/CodeGenCXX/amdgcn-string-literal.cpp
parentb8a4da9becf7fb8eb153b992455983d28bc11ffd (diff)
CodeGen: Emit string literal in constant address space
Some targets have constant address space (e.g. amdgcn). For them string literal should be emitted in constant address space then casted to default address space. Differential Revision: https://reviews.llvm.org/D46643 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@332279 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/amdgcn-string-literal.cpp')
-rw-r--r--test/CodeGenCXX/amdgcn-string-literal.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/CodeGenCXX/amdgcn-string-literal.cpp b/test/CodeGenCXX/amdgcn-string-literal.cpp
new file mode 100644
index 0000000000..7fd05351c8
--- /dev/null
+++ b/test/CodeGenCXX/amdgcn-string-literal.cpp
@@ -0,0 +1,28 @@
+// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -emit-llvm %s -o - | FileCheck %s
+
+// CHECK: @.str = private unnamed_addr addrspace(4) constant [6 x i8] c"g_str\00", align 1
+// CHECK: @g_str = addrspace(1) global i8* addrspacecast (i8 addrspace(4)* getelementptr inbounds ([6 x i8], [6 x i8] addrspace(4)* @.str, i32 0, i32 0) to i8*), align 8
+// CHECK: @g_array = addrspace(1) global [8 x i8] c"g_array\00", align 1
+// CHECK: @.str.1 = private unnamed_addr addrspace(4) constant [6 x i8] c"l_str\00", align 1
+// CHECK: @_ZZ1fvE7l_array = private unnamed_addr addrspace(4) constant [8 x i8] c"l_array\00", align 1
+
+const char* g_str = "g_str";
+char g_array[] = "g_array";
+
+void g(const char* p);
+
+// CHECK-LABEL: define void @_Z1fv()
+void f() {
+ const char* l_str = "l_str";
+
+ // CHECK: call void @llvm.memcpy.p0i8.p4i8.i64
+ char l_array[] = "l_array";
+
+ g(g_str);
+ g(g_array);
+ g(l_str);
+ g(l_array);
+
+ const char* p = g_str;
+ g(p);
+}