r280800 - [OpenCL] Fix pipe built-in functions return type.
Alexey Bader via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 7 03:32:03 PDT 2016
Author: bader
Date: Wed Sep 7 05:32:03 2016
New Revision: 280800
URL: http://llvm.org/viewvc/llvm-project?rev=280800&view=rev
Log:
[OpenCL] Fix pipe built-in functions return type.
By default return type of call expressions calling built-in
functions is set to bool.
Fixes https://llvm.org/bugs/show_bug.cgi?id=30219.
Reviewers: Anastasia
Subscribers: dmitry, cfe-commits, yaxunl
Differential Revision: https://reviews.llvm.org/D24136
Modified:
cfe/trunk/lib/Sema/SemaChecking.cpp
cfe/trunk/test/CodeGenOpenCL/pipe_builtin.cl
Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=280800&r1=280799&r2=280800&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Wed Sep 7 05:32:03 2016
@@ -1020,6 +1020,7 @@ Sema::CheckBuiltinFunctionCall(FunctionD
// check for the argument.
if (SemaBuiltinRWPipe(*this, TheCall))
return ExprError();
+ TheCall->setType(Context.IntTy);
break;
case Builtin::BIreserve_read_pipe:
case Builtin::BIreserve_write_pipe:
@@ -1047,6 +1048,7 @@ Sema::CheckBuiltinFunctionCall(FunctionD
case Builtin::BIget_pipe_max_packets:
if (SemaBuiltinPipePackets(*this, TheCall))
return ExprError();
+ TheCall->setType(Context.UnsignedIntTy);
break;
case Builtin::BIto_global:
case Builtin::BIto_local:
Modified: cfe/trunk/test/CodeGenOpenCL/pipe_builtin.cl
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/pipe_builtin.cl?rev=280800&r1=280799&r2=280800&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenOpenCL/pipe_builtin.cl (original)
+++ cfe/trunk/test/CodeGenOpenCL/pipe_builtin.cl Wed Sep 7 05:32:03 2016
@@ -59,3 +59,19 @@ void test7(write_only pipe int p, global
// CHECK: call i32 @__get_pipe_max_packets(%opencl.pipe_t* %{{.*}})
*ptr = get_pipe_max_packets(p);
}
+
+void test8(read_only pipe int r, write_only pipe int w, global int *ptr) {
+ // verify that return type is correctly casted to i1 value
+ // CHECK: %[[R:[0-9]+]] = call i32 @__read_pipe_2
+ // CHECK: icmp ne i32 %[[R]], 0
+ if (read_pipe(r, ptr)) *ptr = -1;
+ // CHECK: %[[W:[0-9]+]] = call i32 @__write_pipe_2
+ // CHECK: icmp ne i32 %[[W]], 0
+ if (write_pipe(w, ptr)) *ptr = -1;
+ // CHECK: %[[N:[0-9]+]] = call i32 @__get_pipe_num_packets
+ // CHECK: icmp ne i32 %[[N]], 0
+ if (get_pipe_num_packets(r)) *ptr = -1;
+ // CHECK: %[[M:[0-9]+]] = call i32 @__get_pipe_max_packets
+ // CHECK: icmp ne i32 %[[M]], 0
+ if (get_pipe_max_packets(w)) *ptr = -1;
+}
More information about the cfe-commits
mailing list