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