| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |
| ; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck -check-prefix=ARM %s | |
| ; RUN: llc -mtriple=thumbv7-eabi %s -o - | FileCheck -check-prefix=THUMB %s | |
| declare void @otherfn() | |
| define void @cmp_shiftx(i32 %a, i32 %b) { | |
| ; ARM-LABEL: cmp_shiftx: | |
| ; ARM: @ %bb.0: @ %entry | |
| ; ARM-NEXT: cmp r1, r0, lsl #1 | |
| ; ARM-NEXT: movne pc, lr | |
| ; ARM-NEXT: .LBB0_1: @ %if.then | |
| ; ARM-NEXT: b otherfn | |
| ; | |
| ; THUMB-LABEL: cmp_shiftx: | |
| ; THUMB: @ %bb.0: @ %entry | |
| ; THUMB-NEXT: cmp.w r1, r0, lsl #1 | |
| ; THUMB-NEXT: it ne | |
| ; THUMB-NEXT: bxne lr | |
| ; THUMB-NEXT: b otherfn | |
| entry: | |
| %shl = shl i32 %a, 1 | |
| %cmp = icmp eq i32 %shl, %b | |
| br i1 %cmp, label %if.then, label %if.end | |
| if.then: | |
| tail call void @otherfn() | |
| br label %if.end | |
| if.end: | |
| ret void | |
| } | |
| define void @cmp_shifty(i32 %a, i32 %b) { | |
| ; ARM-LABEL: cmp_shifty: | |
| ; ARM: @ %bb.0: @ %entry | |
| ; ARM-NEXT: cmp r0, r1, lsl #1 | |
| ; ARM-NEXT: movne pc, lr | |
| ; ARM-NEXT: .LBB1_1: @ %if.then | |
| ; ARM-NEXT: b otherfn | |
| ; | |
| ; THUMB-LABEL: cmp_shifty: | |
| ; THUMB: @ %bb.0: @ %entry | |
| ; THUMB-NEXT: cmp.w r0, r1, lsl #1 | |
| ; THUMB-NEXT: it ne | |
| ; THUMB-NEXT: bxne lr | |
| ; THUMB-NEXT: b otherfn | |
| entry: | |
| %shl = shl i32 %b, 1 | |
| %cmp = icmp eq i32 %a, %shl | |
| br i1 %cmp, label %if.then, label %if.end | |
| if.then: | |
| tail call void @otherfn() | |
| br label %if.end | |
| if.end: | |
| ret void | |
| } | |
| define void @cmn_shiftx(i32 %a, i32 %b) { | |
| ; ARM-LABEL: cmn_shiftx: | |
| ; ARM: @ %bb.0: @ %entry | |
| ; ARM-NEXT: cmn r1, r0, lsl #1 | |
| ; ARM-NEXT: movne pc, lr | |
| ; ARM-NEXT: .LBB2_1: @ %if.then | |
| ; ARM-NEXT: b otherfn | |
| ; | |
| ; THUMB-LABEL: cmn_shiftx: | |
| ; THUMB: @ %bb.0: @ %entry | |
| ; THUMB-NEXT: cmn.w r1, r0, lsl #1 | |
| ; THUMB-NEXT: it ne | |
| ; THUMB-NEXT: bxne lr | |
| ; THUMB-NEXT: b otherfn | |
| entry: | |
| %shl = shl i32 %a, 1 | |
| %sub = sub nsw i32 0, %b | |
| %cmp = icmp eq i32 %shl, %sub | |
| br i1 %cmp, label %if.then, label %if.end | |
| if.then: | |
| tail call void @otherfn() | |
| br label %if.end | |
| if.end: | |
| ret void | |
| } | |
| define void @cmn_shifty(i32 %a, i32 %b) { | |
| ; ARM-LABEL: cmn_shifty: | |
| ; ARM: @ %bb.0: @ %entry | |
| ; ARM-NEXT: cmn r0, r1, lsl #1 | |
| ; ARM-NEXT: movne pc, lr | |
| ; ARM-NEXT: .LBB3_1: @ %if.then | |
| ; ARM-NEXT: b otherfn | |
| ; | |
| ; THUMB-LABEL: cmn_shifty: | |
| ; THUMB: @ %bb.0: @ %entry | |
| ; THUMB-NEXT: cmn.w r0, r1, lsl #1 | |
| ; THUMB-NEXT: it ne | |
| ; THUMB-NEXT: bxne lr | |
| ; THUMB-NEXT: b otherfn | |
| entry: | |
| %mul = mul i32 %b, -2 | |
| %cmp = icmp eq i32 %a, %mul | |
| br i1 %cmp, label %if.then, label %if.end | |
| if.then: | |
| tail call void @otherfn() | |
| br label %if.end | |
| if.end: | |
| ret void | |
| } |