116 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"4target triple = "x86_64-grtev4-linux-gnu"5 6define ptr @foo(ptr returned %0, i32 %1, i64 %2) {7; CHECK-LABEL: @foo(8; CHECK-NEXT: entry:9; CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds i8, ptr [[TMP0:%.*]], i64 [[TMP2:%.*]]10; CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds i8, ptr [[TMP3]], i64 -3211; CHECK-NEXT: [[VV:%.*]] = trunc i32 [[TMP1:%.*]] to i812; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 113; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 214; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 315; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 416; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 517; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 618; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 719; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 820; CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 921; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 1022; CHECK-NEXT: [[TMP15:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 1123; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 1224; CHECK-NEXT: [[TMP17:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 1325; CHECK-NEXT: [[TMP18:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 1426; CHECK-NEXT: [[TMP19:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 1527; CHECK-NEXT: [[TMP20:%.*]] = getelementptr inbounds i8, ptr [[TMP4]], i64 1628; CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 129; CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 230; CHECK-NEXT: [[TMP23:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 331; CHECK-NEXT: [[TMP24:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 432; CHECK-NEXT: [[TMP25:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 533; CHECK-NEXT: [[TMP26:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 634; CHECK-NEXT: [[TMP27:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 735; CHECK-NEXT: [[TMP28:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 836; CHECK-NEXT: [[TMP29:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 937; CHECK-NEXT: [[TMP30:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 1038; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 1139; CHECK-NEXT: [[TMP32:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 1240; CHECK-NEXT: [[TMP33:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 1341; CHECK-NEXT: [[TMP34:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 1442; CHECK-NEXT: [[TMP35:%.*]] = getelementptr inbounds i8, ptr [[TMP20]], i64 1543; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[TMP4]], i8 [[VV]], i64 32, i1 false)44; CHECK-NEXT: ret ptr [[TMP0]]45;46entry:47 %3 = getelementptr inbounds i8, ptr %0, i64 %248 %4 = getelementptr inbounds i8, ptr %3, i64 -3249 %vv = trunc i32 %1 to i850 store i8 %vv, ptr %4, align 151 %5 = getelementptr inbounds i8, ptr %4, i64 152 store i8 %vv, ptr %5, align 153 %6= getelementptr inbounds i8, ptr %4, i64 254 store i8 %vv, ptr %6, align 155 %7= getelementptr inbounds i8, ptr %4, i64 356 store i8 %vv, ptr %7, align 157 %8= getelementptr inbounds i8, ptr %4, i64 458 store i8 %vv, ptr %8, align 159 %9= getelementptr inbounds i8, ptr %4, i64 560 store i8 %vv, ptr %9, align 161 %10= getelementptr inbounds i8, ptr %4, i64 662 store i8 %vv, ptr %10, align 163 %11= getelementptr inbounds i8, ptr %4, i64 764 store i8 %vv, ptr %11, align 165 %12= getelementptr inbounds i8, ptr %4, i64 866 store i8 %vv, ptr %12, align 167 %13= getelementptr inbounds i8, ptr %4, i64 968 store i8 %vv, ptr %13, align 169 %14= getelementptr inbounds i8, ptr %4, i64 1070 store i8 %vv, ptr %14, align 171 %15= getelementptr inbounds i8, ptr %4, i64 1172 store i8 %vv, ptr %15, align 173 %16= getelementptr inbounds i8, ptr %4, i64 1274 store i8 %vv, ptr %16, align 175 %17= getelementptr inbounds i8, ptr %4, i64 1376 store i8 %vv, ptr %17, align 177 %18= getelementptr inbounds i8, ptr %4, i64 1478 store i8 %vv, ptr %18, align 179 %19= getelementptr inbounds i8, ptr %4, i64 1580 store i8 %vv, ptr %19, align 181 %20= getelementptr inbounds i8, ptr %4, i64 1682 store i8 %vv, ptr %20, align 183 %21= getelementptr inbounds i8, ptr %20, i64 184 store i8 %vv, ptr %21, align 185 %22= getelementptr inbounds i8, ptr %20, i64 286 store i8 %vv, ptr %22, align 187 %23= getelementptr inbounds i8, ptr %20, i64 388 store i8 %vv, ptr %23, align 189 %24= getelementptr inbounds i8, ptr %20, i64 490 store i8 %vv, ptr %24, align 191 %25= getelementptr inbounds i8, ptr %20, i64 592 store i8 %vv, ptr %25, align 193 %26= getelementptr inbounds i8, ptr %20, i64 694 store i8 %vv, ptr %26, align 195 %27= getelementptr inbounds i8, ptr %20, i64 796 store i8 %vv, ptr %27, align 197 %28= getelementptr inbounds i8, ptr %20, i64 898 store i8 %vv, ptr %28, align 199 %29= getelementptr inbounds i8, ptr %20, i64 9100 store i8 %vv, ptr %29, align 1101 %30= getelementptr inbounds i8, ptr %20, i64 10102 store i8 %vv, ptr %30, align 1103 %31 = getelementptr inbounds i8, ptr %20, i64 11104 store i8 %vv, ptr %31, align 1105 %32 = getelementptr inbounds i8, ptr %20, i64 12106 store i8 %vv, ptr %32, align 1107 %33 = getelementptr inbounds i8, ptr %20, i64 13108 store i8 %vv, ptr %33, align 1109 %34 = getelementptr inbounds i8, ptr %20, i64 14110 store i8 %vv, ptr %34, align 1111 %35 = getelementptr inbounds i8, ptr %20, i64 15112 store i8 %vv, ptr %35, align 1113 ret ptr %0114}115 116