|
4 | 4 | define void @memset_equal_size_values(i8* %ptr, i64 %len) {
|
5 | 5 | ; CHECK-LABEL: @memset_equal_size_values(
|
6 | 6 | ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false)
|
7 |
| -; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[PTR]], i8 0, i64 [[LEN]], i1 false) |
8 | 7 | ; CHECK-NEXT: ret void
|
9 | 8 | ;
|
10 | 9 | call void @llvm.memset.p0i8.i64(i8* align 1 %ptr, i8 0, i64 %len, i1 false)
|
@@ -45,10 +44,35 @@ define void @memset_different_size_values_3(i8* %ptr, i64 %len) {
|
45 | 44 | ret void
|
46 | 45 | }
|
47 | 46 |
|
| 47 | +define void @memset_and_store_1(i8* %ptr, i64 %len) { |
| 48 | +; CHECK-LABEL: @memset_and_store_1( |
| 49 | +; CHECK-NEXT: [[BC:%.*]] = bitcast i8* [[PTR:%.*]] to i64* |
| 50 | +; CHECK-NEXT: store i64 123, i64* [[BC]], align 4 |
| 51 | +; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[PTR]], i8 0, i64 [[LEN:%.*]], i1 false) |
| 52 | +; CHECK-NEXT: ret void |
| 53 | +; |
| 54 | + %bc = bitcast i8* %ptr to i64* |
| 55 | + store i64 123, i64* %bc |
| 56 | + call void @llvm.memset.p0i8.i64(i8* align 1 %ptr, i8 0, i64 %len, i1 false) |
| 57 | + ret void |
| 58 | +} |
| 59 | + |
| 60 | +define void @memset_and_store_2(i8* %ptr, i64 %len) { |
| 61 | +; CHECK-LABEL: @memset_and_store_2( |
| 62 | +; CHECK-NEXT: [[BC:%.*]] = bitcast i8* [[PTR:%.*]] to i64* |
| 63 | +; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[PTR]], i8 0, i64 [[LEN:%.*]], i1 false) |
| 64 | +; CHECK-NEXT: store i64 123, i64* [[BC]], align 4 |
| 65 | +; CHECK-NEXT: ret void |
| 66 | +; |
| 67 | + %bc = bitcast i8* %ptr to i64* |
| 68 | + call void @llvm.memset.p0i8.i64(i8* align 1 %ptr, i8 0, i64 %len, i1 false) |
| 69 | + store i64 123, i64* %bc |
| 70 | + ret void |
| 71 | +} |
| 72 | + |
48 | 73 | define void @memcpy_equal_size_values(i8* noalias %src, i8* noalias %dst, i64 %len) {
|
49 | 74 | ; CHECK-LABEL: @memcpy_equal_size_values(
|
50 | 75 | ; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST:%.*]], i8* [[SRC:%.*]], i64 [[LEN:%.*]], i1 false)
|
51 |
| -; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST]], i8* [[SRC]], i64 [[LEN]], i1 false) |
52 | 76 | ; CHECK-NEXT: ret void
|
53 | 77 | ;
|
54 | 78 | call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 %len, i1 false)
|
@@ -91,8 +115,7 @@ define void @memcpy_different_size_values_3(i8* noalias %src, i8* noalias %dst,
|
91 | 115 |
|
92 | 116 | define void @memset_and_memcpy_equal_size_values(i8* noalias %src, i8* noalias %dst, i64 %len) {
|
93 | 117 | ; CHECK-LABEL: @memset_and_memcpy_equal_size_values(
|
94 |
| -; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) |
95 |
| -; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST]], i8* [[SRC:%.*]], i64 [[LEN]], i1 false) |
| 118 | +; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST:%.*]], i8* [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) |
96 | 119 | ; CHECK-NEXT: ret void
|
97 | 120 | ;
|
98 | 121 | call void @llvm.memset.p0i8.i64(i8* align 1 %dst, i8 0, i64 %len, i1 false)
|
@@ -135,8 +158,7 @@ define void @memset_and_memcpy_different_size_values_3(i8* noalias %src, i8* noa
|
135 | 158 |
|
136 | 159 | define void @memcpy_and_memset_equal_size_values(i8* noalias %src, i8* noalias %dst, i64 %len) {
|
137 | 160 | ; CHECK-LABEL: @memcpy_and_memset_equal_size_values(
|
138 |
| -; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST:%.*]], i8* [[SRC:%.*]], i64 [[LEN:%.*]], i1 false) |
139 |
| -; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST]], i8 0, i64 [[LEN]], i1 false) |
| 161 | +; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 1 [[DST:%.*]], i8 0, i64 [[LEN:%.*]], i1 false) |
140 | 162 | ; CHECK-NEXT: ret void
|
141 | 163 | ;
|
142 | 164 | call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 %len, i1 false)
|
|
0 commit comments