1; RUN: llc -o - -O0 < %s | FileCheck %s
2target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
3target triple = "x86_64-unknown-linux-gnu"
4
5define void @test1(i32 %x) #0 {
6; CHECK-LABEL: test1:
7; CHECK:       # BB#0: # %entry
8; CHECK-NEXT:    pushq %rax
9; CHECK-NEXT:    testl %edi, %edi
10; CHECK-NEXT:    setne %al
11; CHECK-NEXT:  # implicit-def: %EDI
12; CHECK-NEXT:    movb %al, %dil
13; CHECK-NEXT:    andl $1, %edi
14; CHECK-NEXT:    kmovw %edi, %k0
15; CHECK-NEXT:    kmovb %k0, %eax
16; CHECK-NEXT:    andb $1, %al
17; CHECK-NEXT:    movzbl %al, %edi
18; CHECK-NEXT:    callq callee1
19; CHECK-NEXT:    popq %rax
20; CHECK-NEXT:    retq
21entry:
22  %tobool = icmp ne i32 %x, 0
23  call void @callee1(i1 zeroext %tobool)
24  ret void
25}
26
27define void @test2(i32 %x) #0 {
28; CHECK-LABEL: test2:
29; CHECK:       # BB#0: # %entry
30; CHECK-NEXT:    pushq %rax
31; CHECK-NEXT:    testl %edi, %edi
32; CHECK-NEXT:    setne %al
33; CHECK-NEXT:  # implicit-def: %EDI
34; CHECK-NEXT:    movb %al, %dil
35; CHECK-NEXT:    andl $1, %edi
36; CHECK-NEXT:    kmovw %edi, %k0
37; CHECK-NEXT:    kmovw %k0, %edi
38; CHECK-NEXT:    andl $1, %edi
39; CHECK-NEXT:    movb %dil, %al
40; CHECK-NEXT:    xorl %edi, %edi
41; CHECK-NEXT:    testb %al, %al
42; CHECK-NEXT:    movl $-1, %ecx
43; CHECK-NEXT:    cmovnel %ecx, %edi
44; CHECK-NEXT:    callq callee2
45; CHECK-NEXT:    popq %rax
46; CHECK-NEXT:    retq
47entry:
48  %tobool = icmp ne i32 %x, 0
49  call void @callee2(i1 signext %tobool)
50  ret void
51}
52
53declare void @callee1(i1 zeroext)
54declare void @callee2(i1 signext)
55
56attributes #0 = { nounwind "target-cpu"="skylake-avx512" }
57