brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · b0c707f Raw
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