| // RUN: %clang_cc1 -O2 -emit-llvm %s -o - -triple x86_64-unknown-linux-gnu | FileCheck %s | 
 |  | 
 | int test_cca(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_cca | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@cca},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@cca"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccae(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccae | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccae},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccae"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccb(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccb | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccb},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccb"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccbe(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccbe | 
 |   //CHECK: tail call i32 asm "cmp $2,$1", "={@ccbe},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccbe"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccc(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccc | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccc},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccc"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_cce(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_cce | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@cce},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@cce"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccz(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccz | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccz},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccz"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccg(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccg | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccg},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccg"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccge(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccge | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccge},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccge"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccl(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccl | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccl},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccl"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccle(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccle | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccle},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccle"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccna(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccna | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccna},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccna"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccnae(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccnae | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnae},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccnae"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccnb(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccnb | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnb},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccnb"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccnbe(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccnbe | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnbe},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccnbe"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccnc(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccnc | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnc},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccnc"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccne(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccne | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccne},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccne"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccnz(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccnz | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnz},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccnz"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccng(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccng | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccng},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccng"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccnge(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccnge | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnge},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccnge"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccnl(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccnl | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnl},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccnl"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccnle(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccnle | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnle},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccnle"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccno(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccno | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccno},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccno"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccnp(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccnp | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnp},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccnp"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccns(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccns | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccns},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccns"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_cco(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_cco | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@cco},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@cco"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccp(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccp | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccp},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccp"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | int test_ccs(long nr, volatile long *addr) { | 
 |   //CHECK-LABEL: @test_ccs | 
 |   //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccs},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) | 
 |   int x; | 
 |   asm("cmp %2,%1" | 
 |       : "=@ccs"(x), "=m"(*(volatile long *)(addr)) | 
 |       : "r"(nr) | 
 |       : "cc"); | 
 |   if (x) | 
 |     return 0; | 
 |   return 1; | 
 | } | 
 |  | 
 | _Bool check_no_clobber_conflicts() { | 
 |   //CHECK-LABEL: @check_no_clobber_conflicts | 
 |   //CHECK:  = tail call i8 asm "", "={@cce},~{cx},~{dirflag},~{fpsr},~{flags}"() | 
 |   _Bool b; | 
 |   asm("" | 
 |       : "=@cce"(b) | 
 |       : | 
 |       : "cx"); | 
 |   return b; | 
 | } |