99 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 < %s -mtriple=riscv32 | FileCheck %s3 4; These tests demonstrate optimizations involving copies from VLENB.5 6define void @unused_copy_is_dead() {7; CHECK-LABEL: unused_copy_is_dead:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: ret10entry:11 call i32 @llvm.read_register.i32(metadata !0)12 ret void13}14 15define i32 @simple_cse() {16; CHECK-LABEL: simple_cse:17; CHECK: # %bb.0: # %entry18; CHECK-NEXT: csrr a0, vlenb19; CHECK-NEXT: sub a0, a0, a020; CHECK-NEXT: ret21entry:22 %v1 = call i32 @llvm.read_register.i32(metadata !0)23 %v2 = call i32 @llvm.read_register.i32(metadata !0)24 %sub = sub i32 %v1, %v225 ret i32 %sub26}27 28define i32 @sink_to_use_branch(i1 %c) {29; CHECK-LABEL: sink_to_use_branch:30; CHECK: # %bb.0: # %entry31; CHECK-NEXT: andi a0, a0, 132; CHECK-NEXT: beqz a0, .LBB2_233; CHECK-NEXT: # %bb.1: # %used34; CHECK-NEXT: csrr a0, vlenb35; CHECK-NEXT: .LBB2_2: # %unused36; CHECK-NEXT: ret37entry:38 %v1 = call i32 @llvm.read_register.i32(metadata !0)39 br i1 %c, label %used, label %unused40used:41 ret i32 %v142unused:43 ret i32 044}45 46define i32 @sink_to_use_call() {47; CHECK-LABEL: sink_to_use_call:48; CHECK: # %bb.0: # %entry49; CHECK-NEXT: addi sp, sp, -1650; CHECK-NEXT: .cfi_def_cfa_offset 1651; CHECK-NEXT: sw ra, 12(sp) # 4-byte Folded Spill52; CHECK-NEXT: sw s0, 8(sp) # 4-byte Folded Spill53; CHECK-NEXT: .cfi_offset ra, -454; CHECK-NEXT: .cfi_offset s0, -855; CHECK-NEXT: csrr s0, vlenb56; CHECK-NEXT: call unknown57; CHECK-NEXT: mv a0, s058; CHECK-NEXT: lw ra, 12(sp) # 4-byte Folded Reload59; CHECK-NEXT: lw s0, 8(sp) # 4-byte Folded Reload60; CHECK-NEXT: .cfi_restore ra61; CHECK-NEXT: .cfi_restore s062; CHECK-NEXT: addi sp, sp, 1663; CHECK-NEXT: .cfi_def_cfa_offset 064; CHECK-NEXT: ret65entry:66 %v1 = call i32 @llvm.read_register.i32(metadata !0)67 call void @unknown() ; maythrow68 ret i32 %v169}70 71define void @machine_licm() {72; CHECK-LABEL: machine_licm:73; CHECK: # %bb.0: # %entry74; CHECK-NEXT: addi sp, sp, -1675; CHECK-NEXT: .cfi_def_cfa_offset 1676; CHECK-NEXT: sw ra, 12(sp) # 4-byte Folded Spill77; CHECK-NEXT: sw s0, 8(sp) # 4-byte Folded Spill78; CHECK-NEXT: .cfi_offset ra, -479; CHECK-NEXT: .cfi_offset s0, -880; CHECK-NEXT: csrr s0, vlenb81; CHECK-NEXT: .LBB4_1: # %loop82; CHECK-NEXT: # =>This Inner Loop Header: Depth=183; CHECK-NEXT: mv a0, s084; CHECK-NEXT: call use85; CHECK-NEXT: j .LBB4_186entry:87 br label %loop88 89loop:90 %v1 = call i32 @llvm.read_register.i32(metadata !0)91 call void @use(i32 %v1)92 br label %loop93}94 95declare void @unknown()96declare void @use(i32)97 98!0 = !{!"vlenb"}99