blob: e6da776bd1ce8a48eb719ff247d2a51d1ea647c4 [file]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -passes=instcombine -S < %s | FileCheck %s
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg)
declare void @llvm.memset.p1.i64(ptr addrspace(1) nocapture writeonly, i8, i64, i1 immarg)
declare void @llvm.memset.element.unordered.atomic.p0.i64(ptr nocapture writeonly, i8, i64, i32 immarg)
declare void @llvm.experimental.memset.pattern.p0.i32.i64(ptr nocapture writeonly, i32, i64, i1 immarg)
define void @variable_fill_len1(ptr %dst, i8 %value) {
; CHECK-LABEL: define void @variable_fill_len1(
; CHECK-SAME: ptr [[DST:%.*]], i8 [[VALUE:%.*]]) {
; CHECK-NEXT: store i8 [[VALUE]], ptr [[DST]], align 1
; CHECK-NEXT: ret void
;
call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value, i64 1, i1 false)
ret void
}
define void @variable_fill_len1_align8(ptr %dst, i8 %value) {
; CHECK-LABEL: define void @variable_fill_len1_align8(
; CHECK-SAME: ptr [[DST:%.*]], i8 [[VALUE:%.*]]) {
; CHECK-NEXT: store i8 [[VALUE]], ptr [[DST]], align 8
; CHECK-NEXT: ret void
;
call void @llvm.memset.p0.i64(ptr align 8 %dst, i8 %value, i64 1, i1 false)
ret void
}
define void @variable_fill_len1_addrspace(ptr addrspace(1) %dst, i8 %value) {
; CHECK-LABEL: define void @variable_fill_len1_addrspace(
; CHECK-SAME: ptr addrspace(1) [[DST:%.*]], i8 [[VALUE:%.*]]) {
; CHECK-NEXT: store i8 [[VALUE]], ptr addrspace(1) [[DST]], align 1
; CHECK-NEXT: ret void
;
call void @llvm.memset.p1.i64(ptr addrspace(1) align 1 %dst, i8 %value, i64 1, i1 false)
ret void
}
define void @variable_fill_len1_atomic(ptr %dst, i8 %value) {
; CHECK-LABEL: define void @variable_fill_len1_atomic(
; CHECK-SAME: ptr [[DST:%.*]], i8 [[VALUE:%.*]]) {
; CHECK-NEXT: store atomic i8 [[VALUE]], ptr [[DST]] unordered, align 1
; CHECK-NEXT: ret void
;
call void @llvm.memset.element.unordered.atomic.p0.i64(ptr align 1 %dst, i8 %value, i64 1, i32 1)
ret void
}
define void @variable_fill_len2(ptr %dst, i8 %value) {
; CHECK-LABEL: define void @variable_fill_len2(
; CHECK-SAME: ptr [[DST:%.*]], i8 [[VALUE:%.*]]) {
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(2) [[DST]], i8 [[VALUE]], i64 2, i1 false)
; CHECK-NEXT: ret void
;
call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value, i64 2, i1 false)
ret void
}
define void @variable_pattern_fill_len1(ptr %dst, i32 %value) {
; CHECK-LABEL: define void @variable_pattern_fill_len1(
; CHECK-SAME: ptr [[DST:%.*]], i32 [[VALUE:%.*]]) {
; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i32.i64(ptr align 4 [[DST]], i32 [[VALUE]], i64 1, i1 false)
; CHECK-NEXT: ret void
;
call void @llvm.experimental.memset.pattern.p0.i32.i64(ptr align 4 %dst, i32 %value, i64 1, i1 false)
ret void
}