1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=armv7a < %s | FileCheck %s --check-prefix=ARM
3; RUN: llc -mtriple=armv6m < %s | FileCheck %s --check-prefix=THUMB
4; RUN: llc -mtriple=armv7m < %s | FileCheck %s --check-prefix=THUMB2
5
6define void @bool_eq(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
7; ARM-LABEL: bool_eq:
8; ARM:       @ %bb.0: @ %entry
9; ARM-NEXT:    cmp r0, r1
10; ARM-NEXT:    bxne lr
11; ARM-NEXT:    bx r2
12;
13; THUMB-LABEL: bool_eq:
14; THUMB:       @ %bb.0: @ %entry
15; THUMB-NEXT:    push {r7, lr}
16; THUMB-NEXT:    cmp r0, r1
17; THUMB-NEXT:    bne .LBB0_2
18; THUMB-NEXT:  @ %bb.1: @ %if.then
19; THUMB-NEXT:    blx r2
20; THUMB-NEXT:  .LBB0_2: @ %if.end
21; THUMB-NEXT:    pop {r7, pc}
22;
23; THUMB2-LABEL: bool_eq:
24; THUMB2:       @ %bb.0: @ %entry
25; THUMB2-NEXT:    cmp r0, r1
26; THUMB2-NEXT:    it ne
27; THUMB2-NEXT:    bxne lr
28; THUMB2-NEXT:    bx r2
29entry:
30  %0 = xor i1 %a, %b
31  br i1 %0, label %if.end, label %if.then
32
33if.then:
34  tail call void %c() #1
35  br label %if.end
36
37if.end:
38  ret void
39}
40
41define void @bool_ne(i1 zeroext %a, i1 zeroext %b, void ()* nocapture %c) nounwind {
42; ARM-LABEL: bool_ne:
43; ARM:       @ %bb.0: @ %entry
44; ARM-NEXT:    cmp r0, r1
45; ARM-NEXT:    bxeq lr
46; ARM-NEXT:    bx r2
47;
48; THUMB-LABEL: bool_ne:
49; THUMB:       @ %bb.0: @ %entry
50; THUMB-NEXT:    push {r7, lr}
51; THUMB-NEXT:    cmp r0, r1
52; THUMB-NEXT:    beq .LBB1_2
53; THUMB-NEXT:  @ %bb.1: @ %if.then
54; THUMB-NEXT:    blx r2
55; THUMB-NEXT:  .LBB1_2: @ %if.end
56; THUMB-NEXT:    pop {r7, pc}
57;
58; THUMB2-LABEL: bool_ne:
59; THUMB2:       @ %bb.0: @ %entry
60; THUMB2-NEXT:    cmp r0, r1
61; THUMB2-NEXT:    it eq
62; THUMB2-NEXT:    bxeq lr
63; THUMB2-NEXT:    bx r2
64entry:
65  %cmp = xor i1 %a, %b
66  br i1 %cmp, label %if.then, label %if.end
67
68if.then:
69  tail call void %c() #1
70  br label %if.end
71
72if.end:
73  ret void
74}
75