| ; 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 |
| } |