blob: e130226865ff781b670feec94a9ba910128ccbc0 [file] [edit]
; 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
}