| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 |
| ; RUN: llc -mtriple=riscv32 -O2 -verify-machineinstrs < %s | FileCheck %s |
| ; RUN: llc -mtriple=riscv64 -O2 -verify-machineinstrs < %s | FileCheck %s |
| |
| define void @u_case1_a(ptr %a, i32 signext %b, ptr %c, ptr %d) { |
| ; CHECK-LABEL: u_case1_a: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: li a4, 32 |
| ; CHECK-NEXT: sw a4, 0(a0) |
| ; CHECK-NEXT: bgeu a1, a4, .LBB0_2 |
| ; CHECK-NEXT: # %bb.1: # %block1 |
| ; CHECK-NEXT: sw a1, 0(a2) |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB0_2: # %block2 |
| ; CHECK-NEXT: li a0, 87 |
| ; CHECK-NEXT: sw a0, 0(a3) |
| ; CHECK-NEXT: ret |
| store i32 32, ptr %a |
| %p = icmp ule i32 %b, 31 |
| br i1 %p, label %block1, label %block2 |
| |
| block1: ; preds = %0 |
| store i32 %b, ptr %c |
| br label %end_block |
| |
| block2: ; preds = %0 |
| store i32 87, ptr %d |
| br label %end_block |
| |
| end_block: ; preds = %block2, %block1 |
| ret void |
| } |
| |
| define void @case1_a(ptr %a, i32 signext %b, ptr %c, ptr %d) { |
| ; CHECK-LABEL: case1_a: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: li a4, -1 |
| ; CHECK-NEXT: sw a4, 0(a0) |
| ; CHECK-NEXT: bge a1, a4, .LBB1_2 |
| ; CHECK-NEXT: # %bb.1: # %block1 |
| ; CHECK-NEXT: sw a1, 0(a2) |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB1_2: # %block2 |
| ; CHECK-NEXT: li a0, 87 |
| ; CHECK-NEXT: sw a0, 0(a3) |
| ; CHECK-NEXT: ret |
| store i32 -1, ptr %a |
| %p = icmp sle i32 %b, -2 |
| br i1 %p, label %block1, label %block2 |
| |
| block1: ; preds = %0 |
| store i32 %b, ptr %c |
| br label %end_block |
| |
| block2: ; preds = %0 |
| store i32 87, ptr %d |
| br label %end_block |
| |
| end_block: ; preds = %block2, %block1 |
| ret void |
| } |
| |
| define void @u_case2_a(ptr %a, i32 signext %b, ptr %c, ptr %d) { |
| ; CHECK-LABEL: u_case2_a: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: li a4, 32 |
| ; CHECK-NEXT: sw a4, 0(a0) |
| ; CHECK-NEXT: bgeu a4, a1, .LBB2_2 |
| ; CHECK-NEXT: # %bb.1: # %block1 |
| ; CHECK-NEXT: sw a1, 0(a2) |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB2_2: # %block2 |
| ; CHECK-NEXT: li a0, 87 |
| ; CHECK-NEXT: sw a0, 0(a3) |
| ; CHECK-NEXT: ret |
| store i32 32, ptr %a |
| %p = icmp uge i32 %b, 33 |
| br i1 %p, label %block1, label %block2 |
| |
| block1: ; preds = %0 |
| store i32 %b, ptr %c |
| br label %end_block |
| |
| block2: ; preds = %0 |
| store i32 87, ptr %d |
| br label %end_block |
| |
| end_block: ; preds = %block2, %block1 |
| ret void |
| } |
| |
| define void @case2_a(ptr %a, i32 signext %b, ptr %c, ptr %d) { |
| ; CHECK-LABEL: case2_a: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: li a4, -4 |
| ; CHECK-NEXT: sw a4, 0(a0) |
| ; CHECK-NEXT: bge a4, a1, .LBB3_2 |
| ; CHECK-NEXT: # %bb.1: # %block1 |
| ; CHECK-NEXT: sw a1, 0(a2) |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB3_2: # %block2 |
| ; CHECK-NEXT: li a0, 87 |
| ; CHECK-NEXT: sw a0, 0(a3) |
| ; CHECK-NEXT: ret |
| store i32 -4, ptr %a |
| %p = icmp sge i32 %b, -3 |
| br i1 %p, label %block1, label %block2 |
| |
| block1: ; preds = %0 |
| store i32 %b, ptr %c |
| br label %end_block |
| |
| block2: ; preds = %0 |
| store i32 87, ptr %d |
| br label %end_block |
| |
| end_block: ; preds = %block2, %block1 |
| ret void |
| } |