brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 95402a8 Raw
74 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=memcpyopt -S -verify-memoryssa | FileCheck %s3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"4 5define void @test(ptr %src, i64 %size) {6; CHECK-LABEL: @test(7; CHECK-NEXT:    [[TMP:%.*]] = alloca i8, i64 [[SIZE:%.*]], align 18; CHECK-NEXT:    [[DST:%.*]] = alloca i8, i64 [[SIZE]], align 19; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP]], ptr align 8 [[SRC:%.*]], i64 [[SIZE]], i1 false)10; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DST]], ptr align 8 [[SRC]], i64 [[SIZE]], i1 false)11; CHECK-NEXT:    ret void12;13  %tmp = alloca i8, i64 %size14  %dst = alloca i8, i64 %size15  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %tmp, ptr align 8 %src, i64 %size, i1 false)16  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %dst, ptr align 8 %tmp, i64 %size, i1 false)17 18  ret void19}20 21define void @dynalloca_test(ptr %src, i64 %size1) {22; CHECK-LABEL: @dynalloca_test(23; CHECK-NEXT:    [[TMP:%.*]] = alloca i8, i64 [[SIZE1:%.*]], align 124; CHECK-NEXT:    [[DST:%.*]] = alloca i8, i64 [[SIZE1]], align 125; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP]], ptr align 8 [[SRC:%.*]], i64 31, i1 false)26; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DST]], ptr align 8 [[SRC]], i64 31, i1 false)27; CHECK-NEXT:    ret void28;29  %tmp = alloca i8, i64 %size130  %dst = alloca i8, i64 %size131  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %tmp, ptr align 8 %src, i64 31, i1 false)32  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %dst, ptr align 8 %tmp, i64 32, i1 false)33 34  ret void35}36 37define void @dynalloca_offset_test(ptr %src, i64 %size1) {38; CHECK-LABEL: @dynalloca_offset_test(39; CHECK-NEXT:    [[TMP:%.*]] = alloca i8, i64 [[SIZE1:%.*]], align 140; CHECK-NEXT:    [[DST:%.*]] = alloca i8, i64 [[SIZE1]], align 141; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP]], ptr align 8 [[SRC:%.*]], i64 31, i1 false)42; CHECK-NEXT:    [[TMP_OFFSET:%.*]] = getelementptr inbounds i8, ptr [[TMP]], i64 143; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i64 144; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DST]], ptr align 1 [[TMP1]], i64 30, i1 false)45; CHECK-NEXT:    ret void46;47  %tmp = alloca i8, i64 %size148  %dst = alloca i8, i64 %size149  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %tmp, ptr align 8 %src, i64 31, i1 false)50  %tmp_offset = getelementptr inbounds i8, ptr %tmp, i64 151  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %dst, ptr align 8 %tmp_offset, i64 31, i1 false)52 53  ret void54}55 56; Dynamic sizes, so left as it is.57define void @negative_test(ptr %src, i64 %size1, i64 %size2) {58; CHECK-LABEL: @negative_test(59; CHECK-NEXT:    [[TMP:%.*]] = alloca i8, i64 [[SIZE1:%.*]], align 160; CHECK-NEXT:    [[DST:%.*]] = alloca i8, i64 [[SIZE2:%.*]], align 161; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP]], ptr align 8 [[SRC:%.*]], i64 [[SIZE1]], i1 false)62; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DST]], ptr align 8 [[TMP]], i64 [[SIZE2]], i1 false)63; CHECK-NEXT:    ret void64;65  %tmp = alloca i8, i64 %size166  %dst = alloca i8, i64 %size267  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %tmp, ptr align 8 %src, i64 %size1, i1 false)68  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %dst, ptr align 8 %tmp, i64 %size2, i1 false)69 70  ret void71}72 73declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)74