blob: a6422c45c037da2330f3e89815b8d484e7040e4c [file] [log] [blame]
; RUN: llvm-as < %s | llc -march=x86-64 | FileCheck %s
; x86's 32-bit cmov doesn't clobber the high 32 bits of the destination
; if the condition is false. An explicit zero-extend (movl) is needed
; after the cmov.
; CHECK: cmovne %edi, %esi
; CHECK-NEXT: movl %esi, %edi
declare void @bar(i64) nounwind
define void @foo(i64 %a, i64 %b, i1 %p) nounwind {
%c = trunc i64 %a to i32
%d = trunc i64 %b to i32
%e = select i1 %p, i32 %c, i32 %d
%f = zext i32 %e to i64
call void @bar(i64 %f)
ret void
}