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