brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 6a48a07 Raw
69 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=memcpyopt < %s | FileCheck %s3 4define void @test_copy_uninit(ptr %arg) {5; CHECK-LABEL: @test_copy_uninit(6; CHECK-NEXT:  start:7; CHECK-NEXT:    [[ALLOCA:%.*]] = alloca [1000 x i32], align 48; CHECK-NEXT:    [[END:%.*]] = getelementptr inbounds [1000 x [1000 x i32]], ptr [[ARG:%.*]], i64 0, i64 10009; CHECK-NEXT:    br label [[LOOP:%.*]]10; CHECK:       loop:11; CHECK-NEXT:    [[CURRENT:%.*]] = phi ptr [ [[ARG]], [[START:%.*]] ], [ [[NEXT:%.*]], [[LOOP]] ]12; CHECK-NEXT:    [[NEXT]] = getelementptr inbounds [1000 x i32], ptr [[CURRENT]], i64 113; CHECK-NEXT:    [[COND:%.*]] = icmp eq ptr [[NEXT]], [[END]]14; CHECK-NEXT:    br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]15; CHECK:       exit:16; CHECK-NEXT:    ret void17;18start:19  %alloca = alloca [1000 x i32], align 420  %end = getelementptr inbounds [1000 x [1000 x i32]], ptr %arg, i64 0, i64 100021  br label %loop22 23loop:                                             ; preds = %loop, %start24  %current = phi ptr [ %arg, %start ], [ %next, %loop ]25  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 dereferenceable(4000) %current, ptr nonnull align 4 dereferenceable(4000) %alloca, i64 4000, i1 false)26  %next = getelementptr inbounds [1000 x i32], ptr %current, i64 127  %cond = icmp eq ptr %next, %end28  br i1 %cond, label %exit, label %loop29 30exit:                                             ; preds = %loop31  ret void32}33 34define void @test_copy_zero(ptr %arg) {35; CHECK-LABEL: @test_copy_zero(36; CHECK-NEXT:  start:37; CHECK-NEXT:    [[ALLOCA:%.*]] = alloca [1000 x i32], align 438; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr nonnull align 4 dereferenceable(4000) [[ALLOCA]], i8 0, i64 4000, i1 false)39; CHECK-NEXT:    [[END:%.*]] = getelementptr inbounds [1000 x [1000 x i32]], ptr [[ARG:%.*]], i64 0, i64 100040; CHECK-NEXT:    br label [[LOOP:%.*]]41; CHECK:       loop:42; CHECK-NEXT:    [[CURRENT:%.*]] = phi ptr [ [[ARG]], [[START:%.*]] ], [ [[NEXT:%.*]], [[LOOP]] ]43; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr align 4 [[CURRENT]], i8 0, i64 4000, i1 false)44; CHECK-NEXT:    [[NEXT]] = getelementptr inbounds [1000 x i32], ptr [[CURRENT]], i64 145; CHECK-NEXT:    [[COND:%.*]] = icmp eq ptr [[NEXT]], [[END]]46; CHECK-NEXT:    br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]47; CHECK:       exit:48; CHECK-NEXT:    ret void49;50start:51  %alloca = alloca [1000 x i32], align 452  call void @llvm.memset.p0.i64(ptr nonnull align 4 dereferenceable(4000) %alloca, i8 0, i64 4000, i1 false)53  %end = getelementptr inbounds [1000 x [1000 x i32]], ptr %arg, i64 0, i64 100054  br label %loop55 56loop:                                             ; preds = %loop, %start57  %current = phi ptr [ %arg, %start ], [ %next, %loop ]58  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 dereferenceable(4000) %current, ptr nonnull align 4 dereferenceable(4000) %alloca, i64 4000, i1 false)59  %next = getelementptr inbounds [1000 x i32], ptr %current, i64 160  %cond = icmp eq ptr %next, %end61  br i1 %cond, label %exit, label %loop62 63exit:                                             ; preds = %loop64  ret void65}66 67declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg)68declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)69