xref: /llvm-project/clang/test/CodeGenOpenCL/unroll-hint.cl (revision 76b178d9496ea8bf2f04f9b6b5839e62f7211508)
16bdbcbb3SAnastasia Stulova// RUN: %clang_cc1 -emit-llvm -O0 -cl-std=CL2.0 -o - %s | FileCheck %s
224939d47SEgor Churaev// RUN: %clang_cc1 -emit-llvm -O0 -cl-std=CL1.2 -o - %s | FileCheck %s
36bdbcbb3SAnastasia Stulova
46bdbcbb3SAnastasia Stulova/*** for ***/
56bdbcbb3SAnastasia Stulovavoid for_count()
66bdbcbb3SAnastasia Stulova{
76bdbcbb3SAnastasia Stulova// CHECK-LABEL: for_count
86bdbcbb3SAnastasia Stulova    __attribute__((opencl_unroll_hint(8)))
96bdbcbb3SAnastasia Stulova    for( int i = 0; i < 1000; ++i);
106bdbcbb3SAnastasia Stulova// CHECK: br label %{{.*}}, !llvm.loop ![[FOR_COUNT:.*]]
116bdbcbb3SAnastasia Stulova}
126bdbcbb3SAnastasia Stulova
136bdbcbb3SAnastasia Stulovavoid for_disable()
146bdbcbb3SAnastasia Stulova{
156bdbcbb3SAnastasia Stulova// CHECK-LABEL: for_disable
166bdbcbb3SAnastasia Stulova    __attribute__((opencl_unroll_hint(1)))
176bdbcbb3SAnastasia Stulova    for( int i = 0; i < 1000; ++i);
186bdbcbb3SAnastasia Stulova// CHECK: br label %{{.*}}, !llvm.loop ![[FOR_DISABLE:.*]]
196bdbcbb3SAnastasia Stulova}
206bdbcbb3SAnastasia Stulova
21*76b178d9SAndrew Savonichevvoid for_enable()
226bdbcbb3SAnastasia Stulova{
23*76b178d9SAndrew Savonichev// CHECK-LABEL: for_enable
246bdbcbb3SAnastasia Stulova    __attribute__((opencl_unroll_hint))
256bdbcbb3SAnastasia Stulova    for( int i = 0; i < 1000; ++i);
26*76b178d9SAndrew Savonichev// CHECK: br label %{{.*}}, !llvm.loop ![[FOR_ENABLE:.*]]
276bdbcbb3SAnastasia Stulova}
286bdbcbb3SAnastasia Stulova
296bdbcbb3SAnastasia Stulova/*** while ***/
306bdbcbb3SAnastasia Stulovavoid while_count()
316bdbcbb3SAnastasia Stulova{
326bdbcbb3SAnastasia Stulova// CHECK-LABEL: while_count
336bdbcbb3SAnastasia Stulova    int i = 1000;
346bdbcbb3SAnastasia Stulova    __attribute__((opencl_unroll_hint(8)))
356bdbcbb3SAnastasia Stulova    while(i-->0);
366bdbcbb3SAnastasia Stulova// CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_COUNT:.*]]
376bdbcbb3SAnastasia Stulova}
386bdbcbb3SAnastasia Stulova
396bdbcbb3SAnastasia Stulovavoid while_disable()
406bdbcbb3SAnastasia Stulova{
416bdbcbb3SAnastasia Stulova// CHECK-LABEL: while_disable
426bdbcbb3SAnastasia Stulova    int i = 1000;
436bdbcbb3SAnastasia Stulova    __attribute__((opencl_unroll_hint(1)))
446bdbcbb3SAnastasia Stulova    while(i-->0);
456bdbcbb3SAnastasia Stulova// CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_DISABLE:.*]]
466bdbcbb3SAnastasia Stulova}
476bdbcbb3SAnastasia Stulova
48*76b178d9SAndrew Savonichevvoid while_enable()
496bdbcbb3SAnastasia Stulova{
50*76b178d9SAndrew Savonichev// CHECK-LABEL: while_enable
516bdbcbb3SAnastasia Stulova    int i = 1000;
526bdbcbb3SAnastasia Stulova    __attribute__((opencl_unroll_hint))
536bdbcbb3SAnastasia Stulova    while(i-->0);
54*76b178d9SAndrew Savonichev// CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_ENABLE:.*]]
556bdbcbb3SAnastasia Stulova}
566bdbcbb3SAnastasia Stulova
576bdbcbb3SAnastasia Stulova/*** do ***/
586bdbcbb3SAnastasia Stulovavoid do_count()
596bdbcbb3SAnastasia Stulova{
606bdbcbb3SAnastasia Stulova// CHECK-LABEL: do_count
616bdbcbb3SAnastasia Stulova    int i = 1000;
626bdbcbb3SAnastasia Stulova    __attribute__((opencl_unroll_hint(8)))
636bdbcbb3SAnastasia Stulova    do {} while(i--> 0);
646bdbcbb3SAnastasia Stulova// CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_COUNT:.*]]
656bdbcbb3SAnastasia Stulova}
666bdbcbb3SAnastasia Stulova
676bdbcbb3SAnastasia Stulovavoid do_disable()
686bdbcbb3SAnastasia Stulova{
696bdbcbb3SAnastasia Stulova// CHECK-LABEL: do_disable
706bdbcbb3SAnastasia Stulova    int i = 1000;
716bdbcbb3SAnastasia Stulova    __attribute__((opencl_unroll_hint(1)))
726bdbcbb3SAnastasia Stulova    do {} while(i--> 0);
736bdbcbb3SAnastasia Stulova// CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_DISABLE:.*]]
746bdbcbb3SAnastasia Stulova}
756bdbcbb3SAnastasia Stulova
76*76b178d9SAndrew Savonichevvoid do_enable()
776bdbcbb3SAnastasia Stulova{
78*76b178d9SAndrew Savonichev// CHECK-LABEL: do_enable
796bdbcbb3SAnastasia Stulova    int i = 1000;
806bdbcbb3SAnastasia Stulova    __attribute__((opencl_unroll_hint))
816bdbcbb3SAnastasia Stulova    do {} while(i--> 0);
82*76b178d9SAndrew Savonichev// CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_ENABLE:.*]]
836bdbcbb3SAnastasia Stulova}
846bdbcbb3SAnastasia Stulova
856bdbcbb3SAnastasia Stulova
866bdbcbb3SAnastasia Stulova// CHECK: ![[FOR_COUNT]]     =  distinct !{![[FOR_COUNT]],  ![[COUNT:.*]]}
876bdbcbb3SAnastasia Stulova// CHECK: ![[COUNT]]         =  !{!"llvm.loop.unroll.count", i32 8}
886bdbcbb3SAnastasia Stulova// CHECK: ![[FOR_DISABLE]]   =  distinct !{![[FOR_DISABLE]],  ![[DISABLE:.*]]}
896bdbcbb3SAnastasia Stulova// CHECK: ![[DISABLE]]       =  !{!"llvm.loop.unroll.disable"}
90*76b178d9SAndrew Savonichev// CHECK: ![[FOR_ENABLE]]      =  distinct !{![[FOR_ENABLE]],  ![[ENABLE:.*]]}
91*76b178d9SAndrew Savonichev// CHECK: ![[ENABLE]]          =  !{!"llvm.loop.unroll.enable"}
926bdbcbb3SAnastasia Stulova// CHECK: ![[WHILE_COUNT]]   =  distinct !{![[WHILE_COUNT]],    ![[COUNT]]}
936bdbcbb3SAnastasia Stulova// CHECK: ![[WHILE_DISABLE]] =  distinct !{![[WHILE_DISABLE]],  ![[DISABLE]]}
94*76b178d9SAndrew Savonichev// CHECK: ![[WHILE_ENABLE]]    =  distinct !{![[WHILE_ENABLE]],     ![[ENABLE]]}
956bdbcbb3SAnastasia Stulova// CHECK: ![[DO_COUNT]]      =  distinct !{![[DO_COUNT]],       ![[COUNT]]}
966bdbcbb3SAnastasia Stulova// CHECK: ![[DO_DISABLE]]    =  distinct !{![[DO_DISABLE]],     ![[DISABLE]]}
97*76b178d9SAndrew Savonichev// CHECK: ![[DO_ENABLE]]       =  distinct !{![[DO_ENABLE]],        ![[ENABLE]]}
98