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