
The LIT test cases were migrated with the script provided by Nikita Popov. No manual changes were made. Committed without review since no functional changes, after consultation with uweigand.
403 lines
9.1 KiB
LLVM
403 lines
9.1 KiB
LLVM
; Test memsets that set all bits.
|
|
;
|
|
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
|
|
|
|
declare void @llvm.memset.p0.i32(ptr nocapture, i8, i32, i1) nounwind
|
|
declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind
|
|
|
|
; No bytes, i32 version.
|
|
define void @f1(ptr %dest) {
|
|
; CHECK-LABEL: f1:
|
|
; CHECK-NOT: %r2
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 0, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; No bytes, i64 version.
|
|
define void @f2(ptr %dest) {
|
|
; CHECK-LABEL: f2:
|
|
; CHECK-NOT: %r2
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 0, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 1 byte, i32 version.
|
|
define void @f3(ptr %dest) {
|
|
; CHECK-LABEL: f3:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 1, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 1 byte, i64 version.
|
|
define void @f4(ptr %dest) {
|
|
; CHECK-LABEL: f4:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 1, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 2 bytes, i32 version.
|
|
define void @f5(ptr %dest) {
|
|
; CHECK-LABEL: f5:
|
|
; CHECK: mvhhi 0(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 2, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 2 bytes, i64 version.
|
|
define void @f6(ptr %dest) {
|
|
; CHECK-LABEL: f6:
|
|
; CHECK: mvhhi 0(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 2, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 3 bytes, i32 version.
|
|
define void @f7(ptr %dest) {
|
|
; CHECK-LABEL: f7:
|
|
; CHECK-DAG: mvhhi 0(%r2), -1
|
|
; CHECK-DAG: mvi 2(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 3, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 3 bytes, i64 version.
|
|
define void @f8(ptr %dest) {
|
|
; CHECK-LABEL: f8:
|
|
; CHECK-DAG: mvhhi 0(%r2), -1
|
|
; CHECK-DAG: mvi 2(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 3, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 4 bytes, i32 version.
|
|
define void @f9(ptr %dest) {
|
|
; CHECK-LABEL: f9:
|
|
; CHECK: mvhi 0(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 4, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 4 bytes, i64 version.
|
|
define void @f10(ptr %dest) {
|
|
; CHECK-LABEL: f10:
|
|
; CHECK: mvhi 0(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 4, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 5 bytes, i32 version.
|
|
define void @f11(ptr %dest) {
|
|
; CHECK-LABEL: f11:
|
|
; CHECK-DAG: mvhi 0(%r2), -1
|
|
; CHECK-DAG: mvi 4(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 5, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 5 bytes, i64 version.
|
|
define void @f12(ptr %dest) {
|
|
; CHECK-LABEL: f12:
|
|
; CHECK-DAG: mvhi 0(%r2), -1
|
|
; CHECK-DAG: mvi 4(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 5, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 6 bytes, i32 version.
|
|
define void @f13(ptr %dest) {
|
|
; CHECK-LABEL: f13:
|
|
; CHECK-DAG: mvhi 0(%r2), -1
|
|
; CHECK-DAG: mvhhi 4(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 6, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 6 bytes, i64 version.
|
|
define void @f14(ptr %dest) {
|
|
; CHECK-LABEL: f14:
|
|
; CHECK-DAG: mvhi 0(%r2), -1
|
|
; CHECK-DAG: mvhhi 4(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 6, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 7 bytes, i32 version.
|
|
define void @f15(ptr %dest) {
|
|
; CHECK-LABEL: f15:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(6,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 7, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 7 bytes, i64 version.
|
|
define void @f16(ptr %dest) {
|
|
; CHECK-LABEL: f16:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(6,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 7, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 8 bytes, i32 version.
|
|
define void @f17(ptr %dest) {
|
|
; CHECK-LABEL: f17:
|
|
; CHECK: mvghi 0(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 8, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 8 bytes, i64 version.
|
|
define void @f18(ptr %dest) {
|
|
; CHECK-LABEL: f18:
|
|
; CHECK: mvghi 0(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 8, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 9 bytes, i32 version.
|
|
define void @f19(ptr %dest) {
|
|
; CHECK-LABEL: f19:
|
|
; CHECK-DAG: mvghi 0(%r2), -1
|
|
; CHECK-DAG: mvi 8(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 9, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 9 bytes, i64 version.
|
|
define void @f20(ptr %dest) {
|
|
; CHECK-LABEL: f20:
|
|
; CHECK-DAG: mvghi 0(%r2), -1
|
|
; CHECK-DAG: mvi 8(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 9, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 10 bytes, i32 version.
|
|
define void @f21(ptr %dest) {
|
|
; CHECK-LABEL: f21:
|
|
; CHECK-DAG: mvghi 0(%r2), -1
|
|
; CHECK-DAG: mvhhi 8(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 10, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 10 bytes, i64 version.
|
|
define void @f22(ptr %dest) {
|
|
; CHECK-LABEL: f22:
|
|
; CHECK-DAG: mvghi 0(%r2), -1
|
|
; CHECK-DAG: mvhhi 8(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 10, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 11 bytes, i32 version.
|
|
define void @f23(ptr %dest) {
|
|
; CHECK-LABEL: f23:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(10,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 11, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 11 bytes, i64 version.
|
|
define void @f24(ptr %dest) {
|
|
; CHECK-LABEL: f24:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(10,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 11, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 12 bytes, i32 version.
|
|
define void @f25(ptr %dest) {
|
|
; CHECK-LABEL: f25:
|
|
; CHECK-DAG: mvghi 0(%r2), -1
|
|
; CHECK-DAG: mvhi 8(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 12, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 12 bytes, i64 version.
|
|
define void @f26(ptr %dest) {
|
|
; CHECK-LABEL: f26:
|
|
; CHECK-DAG: mvghi 0(%r2), -1
|
|
; CHECK-DAG: mvhi 8(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 12, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 13 bytes, i32 version.
|
|
define void @f27(ptr %dest) {
|
|
; CHECK-LABEL: f27:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(12,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 13, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 13 bytes, i64 version.
|
|
define void @f28(ptr %dest) {
|
|
; CHECK-LABEL: f28:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(12,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 13, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 14 bytes, i32 version.
|
|
define void @f29(ptr %dest) {
|
|
; CHECK-LABEL: f29:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(13,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 14, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 14 bytes, i64 version.
|
|
define void @f30(ptr %dest) {
|
|
; CHECK-LABEL: f30:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(13,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 14, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 15 bytes, i32 version.
|
|
define void @f31(ptr %dest) {
|
|
; CHECK-LABEL: f31:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(14,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 15, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 15 bytes, i64 version.
|
|
define void @f32(ptr %dest) {
|
|
; CHECK-LABEL: f32:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(14,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 15, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 16 bytes, i32 version.
|
|
define void @f33(ptr %dest) {
|
|
; CHECK-LABEL: f33:
|
|
; CHECK-DAG: mvghi 0(%r2), -1
|
|
; CHECK-DAG: mvghi 8(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 16, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 16 bytes, i64 version.
|
|
define void @f34(ptr %dest) {
|
|
; CHECK-LABEL: f34:
|
|
; CHECK-DAG: mvghi 0(%r2), -1
|
|
; CHECK-DAG: mvghi 8(%r2), -1
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 16, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 17 bytes, i32 version.
|
|
define void @f35(ptr %dest) {
|
|
; CHECK-LABEL: f35:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(16,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 17, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 17 bytes, i64 version.
|
|
define void @f36(ptr %dest) {
|
|
; CHECK-LABEL: f36:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(16,%r2), 0(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 17, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 257 bytes, i32 version.
|
|
define void @f37(ptr %dest) {
|
|
; CHECK-LABEL: f37:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(255,%r2), 0(%r2)
|
|
; CHECK: mvi 256(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 257, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 257 bytes, i64 version.
|
|
define void @f38(ptr %dest) {
|
|
; CHECK-LABEL: f38:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(255,%r2), 0(%r2)
|
|
; CHECK: mvi 256(%r2), 255
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 257, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 258 bytes, i32 version. We need two MVCs.
|
|
define void @f39(ptr %dest) {
|
|
; CHECK-LABEL: f39:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(255,%r2), 0(%r2)
|
|
; CHECK: mvi 256(%r2), 255
|
|
; CHECK: mvc 257(1,%r2), 256(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i32(ptr %dest, i8 -1, i32 258, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; 258 bytes, i64 version.
|
|
define void @f40(ptr %dest) {
|
|
; CHECK-LABEL: f40:
|
|
; CHECK: mvi 0(%r2), 255
|
|
; CHECK: mvc 1(255,%r2), 0(%r2)
|
|
; CHECK: mvi 256(%r2), 255
|
|
; CHECK: mvc 257(1,%r2), 256(%r2)
|
|
; CHECK: br %r14
|
|
call void @llvm.memset.p0.i64(ptr %dest, i8 -1, i64 258, i1 false)
|
|
ret void
|
|
}
|