From: Stanislav Mekhanoshin Date: Tue, 15 Nov 2016 18:58:03 +0000 (+0000) Subject: [AMDGPU] Add wave barrier builtin X-Git-Tag: llvmorg-4.0.0-rc1~4511 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cd433d28118b345ba367420cbed1acd8fb1e4ea3;p=platform%2Fupstream%2Fllvm.git [AMDGPU] Add wave barrier builtin The wave barrier represents the discardable barrier. Its main purpose is to carry convergent attribute, thus preventing illegal CFG optimizations. All lanes in a wave come to convergence point simultaneously with SIMT, thus no special instruction is needed in the ISA. The barrier is discarded during code generation. Differential Revision: https://reviews.llvm.org/D26584 llvm-svn: 287006 --- diff --git a/clang/include/clang/Basic/BuiltinsAMDGPU.def b/clang/include/clang/Basic/BuiltinsAMDGPU.def index 0495f60..99fb937 100644 --- a/clang/include/clang/Basic/BuiltinsAMDGPU.def +++ b/clang/include/clang/Basic/BuiltinsAMDGPU.def @@ -36,6 +36,7 @@ BUILTIN(__builtin_amdgcn_workitem_id_z, "Ui", "nc") // Instruction builtins. //===----------------------------------------------------------------------===// BUILTIN(__builtin_amdgcn_s_barrier, "v", "n") +BUILTIN(__builtin_amdgcn_wave_barrier, "v", "n") BUILTIN(__builtin_amdgcn_div_scale, "dddbb*", "n") BUILTIN(__builtin_amdgcn_div_scalef, "fffbb*", "n") BUILTIN(__builtin_amdgcn_div_fmas, "ddddb", "nc") diff --git a/clang/test/CodeGenOpenCL/builtins-amdgcn.cl b/clang/test/CodeGenOpenCL/builtins-amdgcn.cl index a715d98..eea6422 100644 --- a/clang/test/CodeGenOpenCL/builtins-amdgcn.cl +++ b/clang/test/CodeGenOpenCL/builtins-amdgcn.cl @@ -270,6 +270,13 @@ void test_s_barrier() __builtin_amdgcn_s_barrier(); } +// CHECK-LABEL: @test_wave_barrier +// CHECK: call void @llvm.amdgcn.wave.barrier( +void test_wave_barrier() +{ + __builtin_amdgcn_wave_barrier(); +} + // CHECK-LABEL: @test_s_memtime // CHECK: call i64 @llvm.amdgcn.s.memtime() void test_s_memtime(global ulong* out)