| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 | |
| ; RUN: llc < %s -mtriple=riscv32 | FileCheck %s --check-prefix=RV32 | |
| ; RUN: llc < %s -mtriple=riscv64 | FileCheck %s --check-prefix=RV64 | |
| define void @memset_i32_var(ptr %dest, i8 %val, i32 %n) nounwind { | |
| ; RV32-LABEL: memset_i32_var: | |
| ; RV32: # %bb.0: # %entry | |
| ; RV32-NEXT: addi sp, sp, -16 | |
| ; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill | |
| ; RV32-NEXT: call memset | |
| ; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload | |
| ; RV32-NEXT: addi sp, sp, 16 | |
| ; RV32-NEXT: ret | |
| ; | |
| ; RV64-LABEL: memset_i32_var: | |
| ; RV64: # %bb.0: # %entry | |
| ; RV64-NEXT: addi sp, sp, -16 | |
| ; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill | |
| ; RV64-NEXT: slli a1, a1, 56 | |
| ; RV64-NEXT: slli a2, a2, 32 | |
| ; RV64-NEXT: srai a1, a1, 56 | |
| ; RV64-NEXT: srli a2, a2, 32 | |
| ; RV64-NEXT: call memset | |
| ; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload | |
| ; RV64-NEXT: addi sp, sp, 16 | |
| ; RV64-NEXT: ret | |
| entry: | |
| call void @llvm.memset.p0.i32(ptr %dest, i8 %val, i32 %n, i1 false) | |
| ret void | |
| } | |
| define void @memset_i32_2147483648(ptr %dest, i8 %val) nounwind { | |
| ; RV32-LABEL: memset_i32_2147483648: | |
| ; RV32: # %bb.0: # %entry | |
| ; RV32-NEXT: addi sp, sp, -16 | |
| ; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill | |
| ; RV32-NEXT: lui a2, 524288 | |
| ; RV32-NEXT: call memset | |
| ; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload | |
| ; RV32-NEXT: addi sp, sp, 16 | |
| ; RV32-NEXT: ret | |
| ; | |
| ; RV64-LABEL: memset_i32_2147483648: | |
| ; RV64: # %bb.0: # %entry | |
| ; RV64-NEXT: addi sp, sp, -16 | |
| ; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill | |
| ; RV64-NEXT: slli a1, a1, 56 | |
| ; RV64-NEXT: li a2, 1 | |
| ; RV64-NEXT: srai a1, a1, 56 | |
| ; RV64-NEXT: slli a2, a2, 31 | |
| ; RV64-NEXT: call memset | |
| ; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload | |
| ; RV64-NEXT: addi sp, sp, 16 | |
| ; RV64-NEXT: ret | |
| entry: | |
| call void @llvm.memset.p0.i32(ptr %dest, i8 %val, i32 -2147483648, i1 false) | |
| ret void | |
| } | |
| define void @memset_zero_i32_2147483648(ptr %dest) nounwind { | |
| ; RV32-LABEL: memset_zero_i32_2147483648: | |
| ; RV32: # %bb.0: # %entry | |
| ; RV32-NEXT: addi sp, sp, -16 | |
| ; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill | |
| ; RV32-NEXT: lui a2, 524288 | |
| ; RV32-NEXT: li a1, 0 | |
| ; RV32-NEXT: call memset | |
| ; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload | |
| ; RV32-NEXT: addi sp, sp, 16 | |
| ; RV32-NEXT: ret | |
| ; | |
| ; RV64-LABEL: memset_zero_i32_2147483648: | |
| ; RV64: # %bb.0: # %entry | |
| ; RV64-NEXT: addi sp, sp, -16 | |
| ; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill | |
| ; RV64-NEXT: li a2, 1 | |
| ; RV64-NEXT: slli a2, a2, 31 | |
| ; RV64-NEXT: li a1, 0 | |
| ; RV64-NEXT: call memset | |
| ; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload | |
| ; RV64-NEXT: addi sp, sp, 16 | |
| ; RV64-NEXT: ret | |
| entry: | |
| call void @llvm.memset.p0.i32(ptr %dest, i8 0, i32 -2147483648, i1 false) | |
| ret void | |
| } | |
| define void @memset_i64_var(ptr %dest, i8 %val, i64 %n) nounwind { | |
| ; RV32-LABEL: memset_i64_var: | |
| ; RV32: # %bb.0: # %entry | |
| ; RV32-NEXT: addi sp, sp, -16 | |
| ; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill | |
| ; RV32-NEXT: call memset | |
| ; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload | |
| ; RV32-NEXT: addi sp, sp, 16 | |
| ; RV32-NEXT: ret | |
| ; | |
| ; RV64-LABEL: memset_i64_var: | |
| ; RV64: # %bb.0: # %entry | |
| ; RV64-NEXT: addi sp, sp, -16 | |
| ; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill | |
| ; RV64-NEXT: slli a1, a1, 56 | |
| ; RV64-NEXT: srai a1, a1, 56 | |
| ; RV64-NEXT: call memset | |
| ; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload | |
| ; RV64-NEXT: addi sp, sp, 16 | |
| ; RV64-NEXT: ret | |
| entry: | |
| call void @llvm.memset.p0.i64(ptr %dest, i8 %val, i64 %n, i1 false) | |
| ret void | |
| } | |
| define void @memset_i64_4294967296(ptr %dest, i8 %val) nounwind { | |
| ; RV32-LABEL: memset_i64_4294967296: | |
| ; RV32: # %bb.0: # %entry | |
| ; RV32-NEXT: ret | |
| ; | |
| ; RV64-LABEL: memset_i64_4294967296: | |
| ; RV64: # %bb.0: # %entry | |
| ; RV64-NEXT: addi sp, sp, -16 | |
| ; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill | |
| ; RV64-NEXT: slli a1, a1, 56 | |
| ; RV64-NEXT: li a2, 1 | |
| ; RV64-NEXT: srai a1, a1, 56 | |
| ; RV64-NEXT: slli a2, a2, 32 | |
| ; RV64-NEXT: call memset | |
| ; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload | |
| ; RV64-NEXT: addi sp, sp, 16 | |
| ; RV64-NEXT: ret | |
| entry: | |
| call void @llvm.memset.p0.i64(ptr %dest, i8 %val, i64 4294967296, i1 false) | |
| ret void | |
| } |