@@ -38,9 +38,8 @@ define void @noaliasdst(ptr %src, ptr noalias %dst) {
3838
3939define void @destroysrc (ptr %src , ptr %dst ) {
4040; CHECK-LABEL: @destroysrc(
41- ; CHECK-NEXT: [[TMP1:%.*]] = load [[S:%.*]], ptr [[SRC:%.*]], align 8
42- ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[SRC]], i8 0, i64 16, i1 false)
43- ; CHECK-NEXT: store [[S]] [[TMP1]], ptr [[DST:%.*]], align 8
41+ ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[SRC:%.*]], i8 0, i64 16, i1 false)
42+ ; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr align 8 [[DST:%.*]], ptr align 8 [[SRC]], i64 16, i1 false)
4443; CHECK-NEXT: ret void
4544;
4645 %1 = load %S , ptr %src
@@ -51,8 +50,8 @@ define void @destroysrc(ptr %src, ptr %dst) {
5150
5251define void @destroynoaliassrc (ptr noalias %src , ptr %dst ) {
5352; CHECK-LABEL: @destroynoaliassrc(
54- ; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DST:%.*]], ptr align 8 [[SRC]], i64 16, i1 false)
55- ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[SRC:%.* ]], i8 0, i64 16, i1 false)
53+ ; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DST:%.*]], ptr align 8 [[SRC:%.* ]], i64 16, i1 false)
54+ ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[SRC]], i8 0, i64 16, i1 false)
5655; CHECK-NEXT: ret void
5756;
5857 %1 = load %S , ptr %src
@@ -63,9 +62,8 @@ define void @destroynoaliassrc(ptr noalias %src, ptr %dst) {
6362
6463define void @copyalias (ptr %src , ptr %dst ) {
6564; CHECK-LABEL: @copyalias(
66- ; CHECK-NEXT: [[TMP1:%.*]] = load [[S:%.*]], ptr [[SRC:%.*]], align 8
67- ; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr align 8 [[DST:%.*]], ptr align 8 [[SRC]], i64 16, i1 false)
68- ; CHECK-NEXT: store [[S]] [[TMP1]], ptr [[DST]], align 8
65+ ; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr align 8 [[DST:%.*]], ptr align 8 [[SRC:%.*]], i64 16, i1 false)
66+ ; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr align 8 [[DST]], ptr align 8 [[SRC]], i64 16, i1 false)
6967; CHECK-NEXT: ret void
7068;
7169 %1 = load %S , ptr %src
@@ -79,9 +77,9 @@ define void @copyalias(ptr %src, ptr %dst) {
7977; sure we lift the computation as well if needed and possible.
8078define void @addrproducer (ptr %src , ptr %dst ) {
8179; CHECK-LABEL: @addrproducer(
80+ ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[DST:%.*]], i8 undef, i64 16, i1 false)
8281; CHECK-NEXT: [[DST2:%.*]] = getelementptr [[S:%.*]], ptr [[DST]], i64 1
8382; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr align 8 [[DST2]], ptr align 8 [[SRC:%.*]], i64 16, i1 false)
84- ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[DST:%.*]], i8 undef, i64 16, i1 false)
8583; CHECK-NEXT: ret void
8684;
8785 %1 = load %S , ptr %src
@@ -93,11 +91,10 @@ define void @addrproducer(ptr %src, ptr %dst) {
9391
9492define void @aliasaddrproducer (ptr %src , ptr %dst , ptr %dstidptr ) {
9593; CHECK-LABEL: @aliasaddrproducer(
96- ; CHECK-NEXT: [[TMP1:%.*]] = load [[S:%.*]], ptr [[SRC:%.*]], align 8
9794; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[DST:%.*]], i8 undef, i64 16, i1 false)
9895; CHECK-NEXT: [[DSTINDEX:%.*]] = load i32, ptr [[DSTIDPTR:%.*]], align 4
99- ; CHECK-NEXT: [[DST2:%.*]] = getelementptr [[S]], ptr [[DST]], i32 [[DSTINDEX]]
100- ; CHECK-NEXT: store [[S]] [[TMP1 ]], ptr [[DST2 ]], align 8
96+ ; CHECK-NEXT: [[DST2:%.*]] = getelementptr [[S:%.* ]], ptr [[DST]], i32 [[DSTINDEX]]
97+ ; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr align 8 [[DST2 ]], ptr align 8 [[SRC:%.* ]], i64 16, i1 false)
10198; CHECK-NEXT: ret void
10299;
103100 %1 = load %S , ptr %src
@@ -110,11 +107,11 @@ define void @aliasaddrproducer(ptr %src, ptr %dst, ptr %dstidptr) {
110107
111108define void @noaliasaddrproducer (ptr %src , ptr noalias %dst , ptr noalias %dstidptr ) {
112109; CHECK-LABEL: @noaliasaddrproducer(
113- ; CHECK-NEXT: [[TMP2 :%.*]] = load i32, ptr [[DSTIDPTR:%.*]], align 4
114- ; CHECK-NEXT: [[DSTINDEX:%.*]] = or i32 [[TMP2 ]], 1
110+ ; CHECK-NEXT: [[TMP1 :%.*]] = load i32, ptr [[DSTIDPTR:%.*]], align 4
111+ ; CHECK-NEXT: [[DSTINDEX:%.*]] = or i32 [[TMP1 ]], 1
115112; CHECK-NEXT: [[DST2:%.*]] = getelementptr [[S:%.*]], ptr [[DST:%.*]], i32 [[DSTINDEX]]
116- ; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DST2]], ptr align 8 [[SRC]], i64 16, i1 false)
117- ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[SRC:%.* ]], i8 undef, i64 16, i1 false)
113+ ; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DST2]], ptr align 8 [[SRC:%.* ]], i64 16, i1 false)
114+ ; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[SRC]], i8 undef, i64 16, i1 false)
118115; CHECK-NEXT: ret void
119116;
120117 %1 = load %S , ptr %src
@@ -130,7 +127,7 @@ define void @throwing_call(ptr noalias %src, ptr %dst) {
130127; CHECK-LABEL: @throwing_call(
131128; CHECK-NEXT: [[TMP1:%.*]] = load [[S:%.*]], ptr [[SRC:%.*]], align 8
132129; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[SRC]], i8 0, i64 16, i1 false)
133- ; CHECK-NEXT: call void @call() [[ATTR2:#.* ]]
130+ ; CHECK-NEXT: call void @call() # [[ATTR2:[0-9]+ ]]
134131; CHECK-NEXT: store [[S]] [[TMP1]], ptr [[DST:%.*]], align 8
135132; CHECK-NEXT: ret void
136133;
0 commit comments