119 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=dse < %s | FileCheck %s3 4declare void @llvm.memcpy.p0.p0.i8(ptr nocapture, ptr nocapture, i8, i1) nounwind5declare void @llvm.memcpy.inline.p0.p0.i8(ptr nocapture, ptr nocapture, i8, i1) nounwind6declare void @llvm.memmove.p0.p0.i8(ptr nocapture, ptr nocapture, i8, i1) nounwind7declare void @llvm.memset.p0.i8(ptr nocapture, i8, i8, i1) nounwind8 9define void @test1(ptr noalias %A, ptr noalias %B) {10; CHECK-LABEL: @test1(11; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i8(ptr [[A:%.*]], ptr [[B:%.*]], i8 12, i1 false)12; CHECK-NEXT: ret void13;14 store i8 0, ptr %A ;; Written to by memcpy15 16 call void @llvm.memcpy.p0.p0.i8(ptr %A, ptr %B, i8 12, i1 false)17 18 ret void19}20 21define void @test2(ptr noalias %A, ptr noalias %B) {22; CHECK-LABEL: @test2(23; CHECK-NEXT: call void @llvm.memmove.p0.p0.i8(ptr [[A]], ptr [[B:%.*]], i8 12, i1 false)24; CHECK-NEXT: ret void25;26 store i8 0, ptr %A ;; Written to by memmove27 28 call void @llvm.memmove.p0.p0.i8(ptr %A, ptr %B, i8 12, i1 false)29 30 ret void31}32 33define void @test2a(ptr %A, ptr %B) {34; CHECK-LABEL: @test2a(35; CHECK-NEXT: store i8 0, ptr [[A:%.*]], align 136; CHECK-NEXT: call void @llvm.memmove.p0.p0.i8(ptr [[A]], ptr [[B:%.*]], i8 12, i1 false)37; CHECK-NEXT: ret void38;39 store i8 0, ptr %A ;; Written to by memmove40 41 call void @llvm.memmove.p0.p0.i8(ptr %A, ptr %B, i8 12, i1 false)42 43 ret void44}45 46define void @test3(ptr noalias %A) {47; CHECK-LABEL: @test3(48; CHECK-NEXT: call void @llvm.memset.p0.i8(ptr [[A:%.*]], i8 0, i8 12, i1 false)49; CHECK-NEXT: ret void50;51 store i8 0, ptr %A ;; Written to by memset52 53 call void @llvm.memset.p0.i8(ptr %A, i8 0, i8 12, i1 false)54 55 ret void56}57 58declare void @llvm.memcpy.element.unordered.atomic.p0.p0.i16(ptr nocapture, ptr nocapture, i16, i32) nounwind59declare void @llvm.memmove.element.unordered.atomic.p0.p0.i16(ptr nocapture, ptr nocapture, i16, i32) nounwind60declare void @llvm.memset.element.unordered.atomic.p0.i16(ptr nocapture, i8, i16, i32) nounwind61 62 63define void @test4() {64; CHECK-LABEL: @test4(65; CHECK-NEXT: ret void66;67 %A = alloca i16, i16 1024, align 268 %B = alloca i16, i16 1024, align 269 70 store atomic i16 0, ptr %A unordered, align 2 ;; Written to by memcpy71 store atomic i16 0, ptr %B unordered, align 2 ;; Read by memcpy72 73 call void @llvm.memcpy.element.unordered.atomic.p0.p0.i16(ptr align 2 %A, ptr align 2 %B, i16 1024, i32 2)74 75 ret void76}77 78define void @test5() {79; CHECK-LABEL: @test5(80; CHECK-NEXT: ret void81;82 %A = alloca i16, i16 1024, align 283 %B = alloca i16, i16 1024, align 284 85 store atomic i16 0, ptr %A unordered, align 2 ;; Written to by memmove86 store atomic i16 0, ptr %B unordered, align 2 ;; Read by memmove87 88 call void @llvm.memmove.element.unordered.atomic.p0.p0.i16(ptr align 2 %A, ptr align 2 %B, i16 1024, i32 2)89 90 ret void91}92 93define void @test6() {94; CHECK-LABEL: @test6(95; CHECK-NEXT: [[B:%.*]] = alloca i16, i16 1024, align 296; CHECK-NEXT: ret void97;98 %A = alloca i16, i16 1024, align 299 %B = alloca i16, i16 1024, align 2100 101 store atomic i16 0, ptr %A unordered, align 2 ;; Written to by memset102 103 call void @llvm.memset.element.unordered.atomic.p0.i16(ptr align 2 %A, i8 0, i16 1024, i32 2)104 105 ret void106}107 108define void @test7(ptr noalias %A, ptr noalias %B) {109; CHECK-LABEL: @test7(110; CHECK-NEXT: call void @llvm.memcpy.inline.p0.p0.i8(ptr [[A:%.*]], ptr [[B:%.*]], i8 12, i1 false)111; CHECK-NEXT: ret void112;113 store i8 0, ptr %A ;; Written to by memcpy114 115 call void @llvm.memcpy.inline.p0.p0.i8(ptr %A, ptr %B, i8 12, i1 false)116 117 ret void118}119