void test1() {
  extern volatile int f11G, a, b;
  f11G = a + b;
  f11G = a - b;
  f11G = a * b;
  f11G = -a;
  ++a;
  --a;
  extern int *P;
  ++P;
  extern volatile signed char PR9350_char_inc;
  ++PR9350_char_inc;
  extern volatile signed char PR9350_char_dec;
  --PR9350_char_dec;
  extern volatile signed short PR9350_short_inc;
  ++PR9350_short_inc;
  extern volatile signed short PR9350_short_dec;
  --PR9350_short_dec;
  __builtin_frame_address(0 + 0);
}


x86 assembly (clang, -O0):
<test1>:
push   %rbp
mov    %rsp,%rbp
mov    0x2edd(%rip),%rax
mov    (%rax),%ecx
mov    0x2eac(%rip),%rax
mov    (%rax),%eax
add    %eax,%ecx
mov    0x2e99(%rip),%rax
mov    %ecx,(%rax)
mov    0x2ec0(%rip),%rax
mov    (%rax),%ecx
mov    0x2e8f(%rip),%rax
mov    (%rax),%eax
sub    %eax,%ecx
mov    0x2e7c(%rip),%rax
mov    %ecx,(%rax)
mov    0x2ea3(%rip),%rax
mov    (%rax),%ecx
mov    0x2e72(%rip),%rax
mov    (%rax),%eax
imul   %eax,%ecx
mov    0x2e5e(%rip),%rax
mov    %ecx,(%rax)
mov    0x2e85(%rip),%rax
mov    (%rax),%eax
xor    %ecx,%ecx
sub    %eax,%ecx
mov    0x2e48(%rip),%rax
mov    %ecx,(%rax)
mov    0x2e6f(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x2e63(%rip),%rax
mov    %ecx,(%rax)
mov    0x2e5a(%rip),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    0x2e4e(%rip),%rax
mov    %ecx,(%rax)
mov    0x2e0d(%rip),%rax
mov    (%rax),%rcx
add    $0x4,%rcx
mov    0x2dff(%rip),%rax
mov    %rcx,(%rax)
mov    0x2e25(%rip),%rax
mov    (%rax),%cl
add    $0x1,%cl
mov    0x2e19(%rip),%rax
mov    %cl,(%rax)
mov    0x2df8(%rip),%rax
mov    (%rax),%cl
add    $0xff,%cl
mov    0x2dec(%rip),%rax
mov    %cl,(%rax)
mov    0x2df3(%rip),%rax
mov    (%rax),%cx
add    $0x1,%cx
mov    0x2de5(%rip),%rax
mov    %cx,(%rax)
mov    0x2da3(%rip),%rax
mov    (%rax),%cx
add    $0xffff,%cx
mov    0x2d95(%rip),%rax
mov    %cx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<test1>:
mov    0x2ee1(%rip),%rax
mov    (%rax),%ecx
mov    0x2eb0(%rip),%rdx
add    (%rdx),%ecx
mov    0x2e9f(%rip),%rsi
mov    %ecx,(%rsi)
mov    (%rax),%ecx
sub    (%rdx),%ecx
mov    %ecx,(%rsi)
mov    (%rax),%ecx
imul   (%rdx),%ecx
mov    %ecx,(%rsi)
xor    %ecx,%ecx
sub    (%rax),%ecx
mov    %ecx,(%rsi)
addl   $0x1,(%rax)
addl   $0xffffffff,(%rax)
mov    0x2e75(%rip),%rax
addq   $0x4,(%rax)
mov    0x2e9a(%rip),%rax
addb   $0x1,(%rax)
mov    0x2e78(%rip),%rax
addb   $0xff,(%rax)
mov    0x2e7e(%rip),%rax
addw   $0x1,(%rax)
mov    0x2e3b(%rip),%rax
addw   $0xffff,(%rax)
ret

LLVM IR (-O0):
@a = external global i32
@b = external global i32
@f11G = external global i32
@P = external global i32*
@PR9350_char_inc = external global i8
@PR9350_char_dec = external global i8
@PR9350_short_inc = external global i16
@PR9350_short_dec = external global i16
define void @test1() {
%1 = load volatile i32, i32* @a
%2 = load volatile i32, i32* @b
%3 = add nsw i32 %1, %2
store volatile i32 %3, i32* @f11G
%4 = load volatile i32, i32* @a
%5 = load volatile i32, i32* @b
%6 = sub nsw i32 %4, %5
store volatile i32 %6, i32* @f11G
%7 = load volatile i32, i32* @a
%8 = load volatile i32, i32* @b
%9 = mul nsw i32 %7, %8
store volatile i32 %9, i32* @f11G
%10 = load volatile i32, i32* @a
%11 = sub nsw i32 0, %10
store volatile i32 %11, i32* @f11G
%12 = load volatile i32, i32* @a
%13 = add nsw i32 %12, 1
store volatile i32 %13, i32* @a
%14 = load volatile i32, i32* @a
%15 = add nsw i32 %14, -1
store volatile i32 %15, i32* @a
%16 = load i32*, i32** @P
%17 = getelementptr inbounds i32, i32* %16, i32 1
store i32* %17, i32** @P
%18 = load volatile i8, i8* @PR9350_char_inc
%19 = add i8 %18, 1
store volatile i8 %19, i8* @PR9350_char_inc
%20 = load volatile i8, i8* @PR9350_char_dec
%21 = add i8 %20, -1
store volatile i8 %21, i8* @PR9350_char_dec
%22 = load volatile i16, i16* @PR9350_short_inc
%23 = add i16 %22, 1
store volatile i16 %23, i16* @PR9350_short_inc
%24 = load volatile i16, i16* @PR9350_short_dec
%25 = add i16 %24, -1
store volatile i16 %25, i16* @PR9350_short_dec
%26 = call i8* @llvm.frameaddress.p0i8(i32 0)
ret void
}

LLVM IR (-O2):
@a = external global i32
@b = external global i32
@f11G = external global i32
@P = external global i32*
@PR9350_char_inc = external global i8
@PR9350_char_dec = external global i8
@PR9350_short_inc = external global i16
@PR9350_short_dec = external global i16
define void @test1() {
%1 = load volatile i32, i32* @a
%2 = load volatile i32, i32* @b
%3 = add nsw i32 %2, %1
store volatile i32 %3, i32* @f11G
%4 = load volatile i32, i32* @a
%5 = load volatile i32, i32* @b
%6 = sub nsw i32 %4, %5
store volatile i32 %6, i32* @f11G
%7 = load volatile i32, i32* @a
%8 = load volatile i32, i32* @b
%9 = mul nsw i32 %8, %7
store volatile i32 %9, i32* @f11G
%10 = load volatile i32, i32* @a
%11 = sub nsw i32 0, %10
store volatile i32 %11, i32* @f11G
%12 = load volatile i32, i32* @a
%13 = add nsw i32 %12, 1
store volatile i32 %13, i32* @a
%14 = load volatile i32, i32* @a
%15 = add nsw i32 %14, -1
store volatile i32 %15, i32* @a
%16 = load i32*, i32** @P
%17 = getelementptr inbounds i32, i32* %16, i64 1
store i32* %17, i32** @P
%18 = load volatile i8, i8* @PR9350_char_inc
%19 = add i8 %18, 1
store volatile i8 %19, i8* @PR9350_char_inc
%20 = load volatile i8, i8* @PR9350_char_dec
%21 = add i8 %20, -1
store volatile i8 %21, i8* @PR9350_char_dec
%22 = load volatile i16, i16* @PR9350_short_inc
%23 = add i16 %22, 1
store volatile i16 %23, i16* @PR9350_short_inc
%24 = load volatile i16, i16* @PR9350_short_dec
%25 = add i16 %24, -1
store volatile i16 %25, i16* @PR9350_short_dec
ret void
}