void f(_Atomic(int) a, _Atomic(int) b) {
  if (a > b) {
  }
  if (a < b) {
  }
  if (a >= b) {
  }
  if (a <= b) {
  }
  if (a == b) {
  }
  if (a != b) {
  }
  if (a == 0) {
  }
  if (a > 0) {
  }
  if (a > 1) {
  }
  if (a > 2) {
  }
  if (!a > 0) {
  }
  if (!a > 1) {
  }
  if (!a > 2) {
  }
  if (!a > b) {
  }
  if (!a > -1) {
  }
}


x86 assembly (clang, -O0):
<f>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    111b <f+0x1b>
jmp    111b <f+0x1b>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    112c <f+0x2c>
jmp    112c <f+0x2c>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jl     113d <f+0x3d>
jmp    113d <f+0x3d>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jg     114e <f+0x4e>
jmp    114e <f+0x4e>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    115f <f+0x5f>
jmp    115f <f+0x5f>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
je     1170 <f+0x70>
jmp    1170 <f+0x70>
cmpl   $0x0,-0x4(%rbp)
jne    117f <f+0x7f>
jmp    117f <f+0x7f>
cmpl   $0x0,-0x4(%rbp)
jle    118e <f+0x8e>
jmp    118e <f+0x8e>
cmpl   $0x1,-0x4(%rbp)
jle    119d <f+0x9d>
jmp    119d <f+0x9d>
cmpl   $0x2,-0x4(%rbp)
jle    11ac <f+0xac>
jmp    11ac <f+0xac>
cmpl   $0x0,-0x4(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
cmp    $0x0,%eax
jle    11c8 <f+0xc8>
jmp    11c8 <f+0xc8>
cmpl   $0x0,-0x4(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
cmp    $0x1,%eax
jle    11e4 <f+0xe4>
jmp    11e4 <f+0xe4>
cmpl   $0x0,-0x4(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
cmp    $0x2,%eax
jle    1200 <f+0x100>
jmp    1200 <f+0x100>
cmpl   $0x0,-0x4(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
cmp    -0x8(%rbp),%eax
jle    121c <f+0x11c>
jmp    121c <f+0x11c>
cmpl   $0x0,-0x4(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
cmp    $0xffffffff,%eax
jle    1238 <f+0x138>
jmp    1238 <f+0x138>
pop    %rbp
ret

x86 assembly (clang, -O2):
<f>:
ret

LLVM IR (-O0):
define void @f(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
%5 = load atomic i32, i32* %3 seq_cst
%6 = load atomic i32, i32* %4 seq_cst
%7 = icmp sgt i32 %5, %6
br i1 %7, label %8, label %9
8: ; preds = %2
br label %9
9: ; preds = %8, %2
%10 = load atomic i32, i32* %3 seq_cst
%11 = load atomic i32, i32* %4 seq_cst
%12 = icmp slt i32 %10, %11
br i1 %12, label %13, label %14
13: ; preds = %9
br label %14
14: ; preds = %13, %9
%15 = load atomic i32, i32* %3 seq_cst
%16 = load atomic i32, i32* %4 seq_cst
%17 = icmp sge i32 %15, %16
br i1 %17, label %18, label %19
18: ; preds = %14
br label %19
19: ; preds = %18, %14
%20 = load atomic i32, i32* %3 seq_cst
%21 = load atomic i32, i32* %4 seq_cst
%22 = icmp sle i32 %20, %21
br i1 %22, label %23, label %24
23: ; preds = %19
br label %24
24: ; preds = %23, %19
%25 = load atomic i32, i32* %3 seq_cst
%26 = load atomic i32, i32* %4 seq_cst
%27 = icmp eq i32 %25, %26
br i1 %27, label %28, label %29
28: ; preds = %24
br label %29
29: ; preds = %28, %24
%30 = load atomic i32, i32* %3 seq_cst
%31 = load atomic i32, i32* %4 seq_cst
%32 = icmp ne i32 %30, %31
br i1 %32, label %33, label %34
33: ; preds = %29
br label %34
34: ; preds = %33, %29
%35 = load atomic i32, i32* %3 seq_cst
%36 = icmp eq i32 %35, 0
br i1 %36, label %37, label %38
37: ; preds = %34
br label %38
38: ; preds = %37, %34
%39 = load atomic i32, i32* %3 seq_cst
%40 = icmp sgt i32 %39, 0
br i1 %40, label %41, label %42
41: ; preds = %38
br label %42
42: ; preds = %41, %38
%43 = load atomic i32, i32* %3 seq_cst
%44 = icmp sgt i32 %43, 1
br i1 %44, label %45, label %46
45: ; preds = %42
br label %46
46: ; preds = %45, %42
%47 = load atomic i32, i32* %3 seq_cst
%48 = icmp sgt i32 %47, 2
br i1 %48, label %49, label %50
49: ; preds = %46
br label %50
50: ; preds = %49, %46
%51 = load atomic i32, i32* %3 seq_cst
%52 = icmp ne i32 %51, 0
%53 = xor i1 %52, true
%54 = zext i1 %53 to i32
%55 = icmp sgt i32 %54, 0
br i1 %55, label %56, label %57
56: ; preds = %50
br label %57
57: ; preds = %56, %50
%58 = load atomic i32, i32* %3 seq_cst
%59 = icmp ne i32 %58, 0
%60 = xor i1 %59, true
%61 = zext i1 %60 to i32
%62 = icmp sgt i32 %61, 1
br i1 %62, label %63, label %64
63: ; preds = %57
br label %64
64: ; preds = %63, %57
%65 = load atomic i32, i32* %3 seq_cst
%66 = icmp ne i32 %65, 0
%67 = xor i1 %66, true
%68 = zext i1 %67 to i32
%69 = icmp sgt i32 %68, 2
br i1 %69, label %70, label %71
70: ; preds = %64
br label %71
71: ; preds = %70, %64
%72 = load atomic i32, i32* %3 seq_cst
%73 = icmp ne i32 %72, 0
%74 = xor i1 %73, true
%75 = zext i1 %74 to i32
%76 = load atomic i32, i32* %4 seq_cst
%77 = icmp sgt i32 %75, %76
br i1 %77, label %78, label %79
78: ; preds = %71
br label %79
79: ; preds = %78, %71
%80 = load atomic i32, i32* %3 seq_cst
%81 = icmp ne i32 %80, 0
%82 = xor i1 %81, true
%83 = zext i1 %82 to i32
%84 = icmp sgt i32 %83, -1
br i1 %84, label %85, label %86
85: ; preds = %79
br label %86
86: ; preds = %85, %79
ret void
}

LLVM IR (-O2):
define void @f(i32 %0, i32 %1) {
ret void
}