1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -disable-llvm-optzns -o - %s -O1 | FileCheck %s 2*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -O0 | FileCheck %s --check-prefix=CHECK_O0 3*67e74705SXin Li 4*67e74705SXin Li // When optimizing, the builtin should be converted to metadata. 5*67e74705SXin Li // When not optimizing, there should be no metadata created for the builtin. 6*67e74705SXin Li // In both cases, the builtin should be removed from the code. 7*67e74705SXin Li 8*67e74705SXin Li void foo(); branch(int x)9*67e74705SXin Livoid branch(int x) { 10*67e74705SXin Li // CHECK-LABEL: define void @branch( 11*67e74705SXin Li 12*67e74705SXin Li // CHECK-NOT: builtin_unpredictable 13*67e74705SXin Li // CHECK: !unpredictable [[METADATA:.+]] 14*67e74705SXin Li 15*67e74705SXin Li // CHECK_O0-NOT: builtin_unpredictable 16*67e74705SXin Li // CHECK_O0-NOT: !unpredictable 17*67e74705SXin Li 18*67e74705SXin Li if (__builtin_unpredictable(x > 0)) 19*67e74705SXin Li foo (); 20*67e74705SXin Li } 21*67e74705SXin Li unpredictable_switch(int x)22*67e74705SXin Liint unpredictable_switch(int x) { 23*67e74705SXin Li // CHECK-LABEL: @unpredictable_switch( 24*67e74705SXin Li 25*67e74705SXin Li // CHECK-NOT: builtin_unpredictable 26*67e74705SXin Li // CHECK: !unpredictable [[METADATA:.+]] 27*67e74705SXin Li 28*67e74705SXin Li // CHECK_O0-NOT: builtin_unpredictable 29*67e74705SXin Li // CHECK_O0-NOT: !unpredictable 30*67e74705SXin Li 31*67e74705SXin Li switch(__builtin_unpredictable(x)) { 32*67e74705SXin Li default: 33*67e74705SXin Li return 0; 34*67e74705SXin Li case 0: 35*67e74705SXin Li case 1: 36*67e74705SXin Li case 2: 37*67e74705SXin Li return 1; 38*67e74705SXin Li case 5: 39*67e74705SXin Li return 5; 40*67e74705SXin Li }; 41*67e74705SXin Li 42*67e74705SXin Li return 0; 43*67e74705SXin Li } 44*67e74705SXin Li 45*67e74705SXin Li // CHECK: [[METADATA]] = !{} 46*67e74705SXin Li 47