1ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanian// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s 2e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian 3e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanianint x; 4e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanianint y(void); 5e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanianvoid foo(); 6e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanianvoid FUNC() { 7e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian// CHECK: [[call:%.*]] = call i32 @y 8e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian if (__builtin_expect (x, y())) 9e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian foo (); 10e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian} 11e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian 12ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanian// rdar://9330105 13ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanianvoid isigprocmask(void); 14ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanianlong bar(); 15ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanian 16ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanianint main() { 17ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanian (void) __builtin_expect((isigprocmask(), 0), bar()); 18ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanian} 19ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanian 20ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanian// CHECK: call void @isigprocmask() 21ec9919549095390b5737c561544f8bd49fc894deFariborz Jahanian// CHECK: [[C:%.*]] = call i64 (...)* @bar() 22558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak 23558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak 24558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak// CHECK: @test1 25558229f267d2cdee69639df04382082e7c7ad54cJakub Staszakint test1(int x) { 26558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak// CHECK: @llvm.expect 27558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak if (__builtin_expect (x, 1)) 28558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak return 0; 29558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak return x; 30558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak} 31558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak 32558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak// CHECK: @test2 33558229f267d2cdee69639df04382082e7c7ad54cJakub Staszakint test2(int x) { 34558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak// CHECK: @llvm.expect 35558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak switch(__builtin_expect(x, 5)) { 36558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak default: 37558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak return 0; 38558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak case 0: 39558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak case 1: 40558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak case 2: 41558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak return 1; 42558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak case 5: 43558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak return 5; 44558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak }; 45558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak 46558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak return 0; 47558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak} 48