Souper says:

; Function: fn1
%0:i32 = var 
%1:i1 = ne 0:i32, %0
%2:i32 = zext %1
%3:i32 = sdiv %2, 4294967294:i32
%4:i16 = trunc %3
%5:i1 = eq 0:i16, %4
cand %5 1:i1

COMMAND: /home/regehr/souper/build/souper -stp-path=/usr/local/bin/stp reduce_580/foo.bc

LLVM says:

define void @fn1() #0 {
entry:
  %0 = load i32* @a, align 4, !tbaa !1
  %tobool = icmp ne i32 %0, 0
  %lor.ext = zext i1 %tobool to i32
  %div = sdiv i32 %lor.ext, -2
  %conv = trunc i32 %div to i16
  store i16 %conv, i16* @c, align 2, !tbaa !5
  %tobool1 = icmp eq i16 %conv, 0
  br i1 %tobool1, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i32 0, i32* @b, align 4, !tbaa !1
  br label %if.end

if.end:                                           ; preds = %entry, %if.then
  ret void
}

COMMAND: /home/regehr/souper/third_party/llvm/Debug/bin/clang -c -w -emit-llvm -O3 reduce_580/foo.c -o reduce_580/foo.bc

C source code:

int a, b;
short c;
void fn1() {
  c = (0 || a) / (short)65534;
  if (c)
    b = 0;
}

x86-64 from LLVM:

fn1:                                    # @fn1
	movw	$0, c(%rip)
	movb	$1, %al
	testb	%al, %al
	jne	.LBB0_2
	movl	$0, b(%rip)
.LBB0_2:                                # %if.end
	retq

COMMAND: /home/regehr/souper/third_party/llvm/Debug/bin/clang -w -O3 reduce_580/foo.c -S -o -

x86-64 from GCC:

fn1:
	xorl	%eax, %eax
	movw	%ax, c(%rip)
	ret

COMMAND: gcc -w -O3 reduce_580/foo.c -S -o -