1 // RUN: %clang_cc1 -O1 -disable-llvm-passes -emit-llvm %s -o - -triple=x86_64-linux-gnu -verify 2 // RUN: %clang_cc1 -O1 -disable-llvm-passes -emit-llvm %s -o - -triple=x86_64-linux-gnu | FileCheck %s 3 4 void wl(int e){ 5 // CHECK-LABEL: define{{.*}}wl 6 // CHECK: br {{.*}} !prof !6 7 while(e) [[likely]] ++e; 8 } 9 10 void wu(int e){ 11 // CHECK-LABEL: define{{.*}}wu 12 // CHECK: br {{.*}} !prof !10 13 while(e) [[unlikely]] ++e; 14 } 15 16 void w_branch_elided(unsigned e){ 17 // CHECK-LABEL: define{{.*}}w_branch_elided 18 // CHECK-NOT: br {{.*}} !prof 19 // expected-warning@+2 {{attribute 'likely' has no effect when annotating an infinite loop}} 20 // expected-note@+1 {{annotating the infinite loop here}} 21 while(1) [[likely]] ++e; 22 } 23 24 void fl(unsigned e) 25 { 26 // CHECK-LABEL: define{{.*}}fl 27 // CHECK: br {{.*}} !prof !6 28 for(int i = 0; i != e; ++e) [[likely]]; 29 } 30 31 void fu(int e) 32 { 33 // CHECK-LABEL: define{{.*}}fu 34 // CHECK: br {{.*}} !prof !10 35 for(int i = 0; i != e; ++e) [[unlikely]]; 36 } 37 38 void f_branch_elided() 39 { 40 // CHECK-LABEL: define{{.*}}f_branch_elided 41 // CHECK-NOT: br {{.*}} !prof 42 for(;;) [[likely]]; 43 } 44 45 void frl(int (&&e) [4]) 46 { 47 // CHECK-LABEL: define{{.*}}frl 48 // CHECK: br {{.*}} !prof !6 49 for(int i : e) [[likely]]; 50 } 51 52 void fru(int (&&e) [4]) 53 { 54 // CHECK-LABEL: define{{.*}}fru 55 // CHECK: br {{.*}} !prof !10 56 for(int i : e) [[unlikely]]; 57 } 58 59 // CHECK: !6 = !{!"branch_weights", i32 2000, i32 1} 60 // CHECK: !10 = !{!"branch_weights", i32 1, i32 2000} 61