void testIdempotent(int a) {
  if ((a * 1) != a)
    ((void)*(char *)0);
  if ((a / 1) != a)
    ((void)*(char *)0);
  if ((a + 0) != a)
    ((void)*(char *)0);
  if ((a - 0) != a)
    ((void)*(char *)0);
  if ((a << 0) != a)
    ((void)*(char *)0);
  if ((a >> 0) != a)
    ((void)*(char *)0);
  if ((a ^ 0) != a)
    ((void)*(char *)0);
  if ((a & (~0)) != a)
    ((void)*(char *)0);
  if ((a | 0) != a)
    ((void)*(char *)0);
}


x86 assembly (clang, -O0):
<testIdempotent>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
shl    $0x0,%eax
cmp    -0x4(%rbp),%eax
je     1116 <testIdempotent+0x16>
mov    -0x4(%rbp),%eax
mov    $0x1,%ecx
cltd
idiv   %ecx
cmp    -0x4(%rbp),%eax
je     112a <testIdempotent+0x2a>
mov    -0x4(%rbp),%eax
add    $0x0,%eax
cmp    -0x4(%rbp),%eax
je     1139 <testIdempotent+0x39>
mov    -0x4(%rbp),%eax
sub    $0x0,%eax
cmp    -0x4(%rbp),%eax
je     1148 <testIdempotent+0x48>
mov    -0x4(%rbp),%eax
shl    $0x0,%eax
cmp    -0x4(%rbp),%eax
je     1157 <testIdempotent+0x57>
mov    -0x4(%rbp),%eax
sar    $0x0,%eax
cmp    -0x4(%rbp),%eax
je     1166 <testIdempotent+0x66>
mov    -0x4(%rbp),%eax
xor    $0x0,%eax
cmp    -0x4(%rbp),%eax
je     1175 <testIdempotent+0x75>
mov    -0x4(%rbp),%eax
and    $0xffffffff,%eax
cmp    -0x4(%rbp),%eax
je     1184 <testIdempotent+0x84>
mov    -0x4(%rbp),%eax
or     $0x0,%eax
cmp    -0x4(%rbp),%eax
je     1193 <testIdempotent+0x93>
pop    %rbp
ret

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

LLVM IR (-O0):
define void @testIdempotent(i32 %0) {
%2 = alloca i32
store i32 %0, i32* %2
%3 = load i32, i32* %2
%4 = mul nsw i32 %3, 1
%5 = load i32, i32* %2
%6 = icmp ne i32 %4, %5
br i1 %6, label %7, label %9
7: ; preds = %1
%8 = load i8, i8* null
br label %9
9: ; preds = %7, %1
%10 = load i32, i32* %2
%11 = sdiv i32 %10, 1
%12 = load i32, i32* %2
%13 = icmp ne i32 %11, %12
br i1 %13, label %14, label %16
14: ; preds = %9
%15 = load i8, i8* null
br label %16
16: ; preds = %14, %9
%17 = load i32, i32* %2
%18 = add nsw i32 %17, 0
%19 = load i32, i32* %2
%20 = icmp ne i32 %18, %19
br i1 %20, label %21, label %23
21: ; preds = %16
%22 = load i8, i8* null
br label %23
23: ; preds = %21, %16
%24 = load i32, i32* %2
%25 = sub nsw i32 %24, 0
%26 = load i32, i32* %2
%27 = icmp ne i32 %25, %26
br i1 %27, label %28, label %30
28: ; preds = %23
%29 = load i8, i8* null
br label %30
30: ; preds = %28, %23
%31 = load i32, i32* %2
%32 = shl i32 %31, 0
%33 = load i32, i32* %2
%34 = icmp ne i32 %32, %33
br i1 %34, label %35, label %37
35: ; preds = %30
%36 = load i8, i8* null
br label %37
37: ; preds = %35, %30
%38 = load i32, i32* %2
%39 = ashr i32 %38, 0
%40 = load i32, i32* %2
%41 = icmp ne i32 %39, %40
br i1 %41, label %42, label %44
42: ; preds = %37
%43 = load i8, i8* null
br label %44
44: ; preds = %42, %37
%45 = load i32, i32* %2
%46 = xor i32 %45, 0
%47 = load i32, i32* %2
%48 = icmp ne i32 %46, %47
br i1 %48, label %49, label %51
49: ; preds = %44
%50 = load i8, i8* null
br label %51
51: ; preds = %49, %44
%52 = load i32, i32* %2
%53 = and i32 %52, -1
%54 = load i32, i32* %2
%55 = icmp ne i32 %53, %54
br i1 %55, label %56, label %58
56: ; preds = %51
%57 = load i8, i8* null
br label %58
58: ; preds = %56, %51
%59 = load i32, i32* %2
%60 = or i32 %59, 0
%61 = load i32, i32* %2
%62 = icmp ne i32 %60, %61
br i1 %62, label %63, label %65
63: ; preds = %58
%64 = load i8, i8* null
br label %65
65: ; preds = %63, %58
ret void
}

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