]> granicus.if.org Git - clang/commitdiff
[OpenCL] Fix pipe size in TypeInfo.
authorAnastasia Stulova <anastasia.stulova@arm.com>
Mon, 5 Jun 2017 11:27:03 +0000 (11:27 +0000)
committerAnastasia Stulova <anastasia.stulova@arm.com>
Mon, 5 Jun 2017 11:27:03 +0000 (11:27 +0000)
Pipes are now the size of pointers rather than the size
of the type that they contain.

Patch by Simon Perretta!

Differential Revision: https://reviews.llvm.org/D33597

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@304708 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp
test/Index/pipe-size.cl [new file with mode: 0644]

index 34c4d2617ec9d9cd16785ed1e931f028ecb74a84..62b19685c677ff7bdc837a678f7f940acb4319f9 100644 (file)
@@ -1939,9 +1939,8 @@ TypeInfo ASTContext::getTypeInfoImpl(const Type *T) const {
   break;
 
   case Type::Pipe: {
-    TypeInfo Info = getTypeInfo(cast<PipeType>(T)->getElementType());
-    Width = Info.Width;
-    Align = Info.Align;
+    Width = Target->getPointerWidth(getTargetAddressSpace(LangAS::opencl_global));
+    Align = Target->getPointerAlign(getTargetAddressSpace(LangAS::opencl_global));
   }
 
   }
diff --git a/test/Index/pipe-size.cl b/test/Index/pipe-size.cl
new file mode 100644 (file)
index 0000000..d07d706
--- /dev/null
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -x cl -O0 -cl-std=CL2.0 -emit-llvm -triple x86_64-unknown-linux-gnu %s -o - | FileCheck %s --check-prefix=X86
+// RUN: %clang_cc1 -x cl -O0 -cl-std=CL2.0 -emit-llvm -triple spir-unknown-unknown %s -o - | FileCheck %s --check-prefix=SPIR
+// RUN: %clang_cc1 -x cl -O0 -cl-std=CL2.0 -emit-llvm -triple spir64-unknown-unknown %s -o - | FileCheck %s --check-prefix=SPIR64
+// RUN: %clang_cc1 -x cl -O0 -cl-std=CL2.0 -emit-llvm -triple amdgcn-amd-amdhsa-amdgizcl %s -o - | FileCheck %s --check-prefix=AMD
+__kernel void testPipe( pipe int test )
+{
+    int s = sizeof(test);
+    // X86: store %opencl.pipe_t* %test, %opencl.pipe_t** %test.addr, align 8
+    // X86: store i32 8, i32* %s, align 4
+    // SPIR: store %opencl.pipe_t addrspace(1)* %test, %opencl.pipe_t addrspace(1)** %test.addr, align 4
+    // SPIR: store i32 4, i32* %s, align 4
+    // SPIR64: store %opencl.pipe_t addrspace(1)* %test, %opencl.pipe_t addrspace(1)** %test.addr, align 8
+    // SPIR64: store i32 8, i32* %s, align 4
+    // AMD: store %opencl.pipe_t addrspace(1)* %test, %opencl.pipe_t addrspace(1)* addrspace(5)* %test.addr, align 4
+    // AMD: store i32 8, i32 addrspace(5)* %s, align 4
+}