| ; 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 |
| } |