llvm.org GIT mirror llvm / release_26 test / CodeGen / X86 / cmov-zext.ll
release_26

Tree @release_26 (Download .tar.gz)

cmov-zext.ll @release_26raw · history · 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
}