| ; RUN: llc < %s -march=xcore -asm-verbose=0 | FileCheck %s | |
| define i32 @ashr(i32 %a, i32 %b) { | |
| %1 = ashr i32 %a, %b | |
| ret i32 %1 | |
| } | |
| ; CHECK: ashr: | |
| ; CHECK-NEXT: ashr r0, r0, r1 | |
| define i32 @ashri1(i32 %a) { | |
| %1 = ashr i32 %a, 24 | |
| ret i32 %1 | |
| } | |
| ; CHECK: ashri1: | |
| ; CHECK-NEXT: ashr r0, r0, 24 | |
| define i32 @ashri2(i32 %a) { | |
| %1 = ashr i32 %a, 31 | |
| ret i32 %1 | |
| } | |
| ; CHECK: ashri2: | |
| ; CHECK-NEXT: ashr r0, r0, 32 | |
| define i32 @f1(i32 %a) { | |
| %1 = icmp slt i32 %a, 0 | |
| br i1 %1, label %less, label %not_less | |
| less: | |
| ret i32 10 | |
| not_less: | |
| ret i32 17 | |
| } | |
| ; CHECK: f1: | |
| ; CHECK-NEXT: ashr r0, r0, 32 | |
| ; CHECK-NEXT: bf r0 | |
| define i32 @f2(i32 %a) { | |
| %1 = icmp sge i32 %a, 0 | |
| br i1 %1, label %greater, label %not_greater | |
| greater: | |
| ret i32 10 | |
| not_greater: | |
| ret i32 17 | |
| } | |
| ; CHECK: f2: | |
| ; CHECK-NEXT: ashr r0, r0, 32 | |
| ; CHECK-NEXT: bt r0 | |
| define i32 @f3(i32 %a) { | |
| %1 = icmp slt i32 %a, 0 | |
| %2 = select i1 %1, i32 10, i32 17 | |
| ret i32 %2 | |
| } | |
| ; CHECK: f3: | |
| ; CHECK-NEXT: ashr r0, r0, 32 | |
| ; CHECK-NEXT: bf r0 | |
| ; CHECK-NEXT: ldc r0, 10 | |
| ; CHECK: ldc r0, 17 | |
| define i32 @f4(i32 %a) { | |
| %1 = icmp sge i32 %a, 0 | |
| %2 = select i1 %1, i32 10, i32 17 | |
| ret i32 %2 | |
| } | |
| ; CHECK: f4: | |
| ; CHECK-NEXT: ashr r0, r0, 32 | |
| ; CHECK-NEXT: bf r0 | |
| ; CHECK-NEXT: ldc r0, 17 | |
| ; CHECK: ldc r0, 10 | |
| define i32 @f5(i32 %a) { | |
| %1 = icmp sge i32 %a, 0 | |
| %2 = zext i1 %1 to i32 | |
| ret i32 %2 | |
| } | |
| ; CHECK: f5: | |
| ; CHECK-NEXT: ashr r0, r0, 32 | |
| ; CHECK-NEXT: eq r0, r0, 0 |