brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 48fb579 Raw
100 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --version 62; RUN: opt -p loop-vectorize -S %s | FileCheck %s3 4target triple = "x86_64-pc-windows-gnu"5 6define ptr @low_trip_count_via_profile_info_with_live_out(ptr align 16 %start, ptr align 16 %end, ptr noalias %src) #0 {7; CHECK-LABEL: define ptr @low_trip_count_via_profile_info_with_live_out(8; CHECK-SAME: ptr align 16 [[START:%.*]], ptr align 16 [[END:%.*]], ptr noalias [[SRC:%.*]]) #[[ATTR0:[0-9]+]] {9; CHECK-NEXT:  [[ENTRY:.*]]:10; CHECK-NEXT:    br label %[[LOOP:.*]]11; CHECK:       [[LOOP]]:12; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]13; CHECK-NEXT:    [[PTR:%.*]] = phi ptr [ [[START]], %[[ENTRY]] ], [ [[PTR_NEXT:%.*]], %[[LOOP]] ]14; CHECK-NEXT:    [[IV_NEXT]] = add i64 [[IV]], 115; CHECK-NEXT:    [[GEP_SRC:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[IV_NEXT]]16; CHECK-NEXT:    [[L:%.*]] = load i8, ptr [[GEP_SRC]], align 117; CHECK-NEXT:    [[PTR_NEXT]] = getelementptr i8, ptr [[PTR]], i64 118; CHECK-NEXT:    store i8 [[L]], ptr [[PTR]], align 119; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq ptr [[PTR]], [[END]]20; CHECK-NEXT:    br i1 [[EXITCOND]], label %[[EXIT:.*]], label %[[LOOP]], !prof [[PROF0:![0-9]+]]21; CHECK:       [[EXIT]]:22; CHECK-NEXT:    [[PTR_NEXT_LCSSA:%.*]] = phi ptr [ [[PTR_NEXT]], %[[LOOP]] ]23; CHECK-NEXT:    ret ptr [[PTR_NEXT_LCSSA]]24;25entry:26  br label %loop27 28loop:29  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]30  %ptr = phi ptr [ %start, %entry ], [ %ptr.next, %loop ]31  %iv.next = add i64 %iv, 132  %gep.src = getelementptr i8, ptr %src, i64 %iv.next33  %l = load i8, ptr %gep.src, align 134  %ptr.next = getelementptr i8, ptr %ptr, i64 135  store i8 %l, ptr %ptr, align 136  %exitcond = icmp eq ptr %ptr, %end37  br i1 %exitcond, label %exit, label %loop, !prof !038 39exit:40  ret ptr %ptr.next41}42 43define void @low_trip_count_via_profile_info(ptr align 16 %start, ptr align 16 %end, ptr noalias %src) #0 {44; CHECK-LABEL: define void @low_trip_count_via_profile_info(45; CHECK-SAME: ptr align 16 [[START:%.*]], ptr align 16 [[END:%.*]], ptr noalias [[SRC:%.*]]) #[[ATTR0]] {46; CHECK-NEXT:  [[ENTRY:.*:]]47; CHECK-NEXT:    [[START2:%.*]] = ptrtoint ptr [[START]] to i6448; CHECK-NEXT:    [[END1:%.*]] = ptrtoint ptr [[END]] to i6449; CHECK-NEXT:    [[TMP0:%.*]] = add i64 [[END1]], 150; CHECK-NEXT:    [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]]51; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]52; CHECK:       [[VECTOR_PH]]:53; CHECK-NEXT:    [[N_RND_UP:%.*]] = add i64 [[TMP1]], 6354; CHECK-NEXT:    [[N_MOD_VF:%.*]] = urem i64 [[N_RND_UP]], 6455; CHECK-NEXT:    [[N_VEC:%.*]] = sub i64 [[N_RND_UP]], [[N_MOD_VF]]56; CHECK-NEXT:    [[TRIP_COUNT_MINUS_1:%.*]] = sub i64 [[TMP1]], 157; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <64 x i64> poison, i64 [[TRIP_COUNT_MINUS_1]], i64 058; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <64 x i64> [[BROADCAST_SPLATINSERT]], <64 x i64> poison, <64 x i32> zeroinitializer59; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]60; CHECK:       [[VECTOR_BODY]]:61; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]62; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[START]], i64 [[INDEX]]63; CHECK-NEXT:    [[BROADCAST_SPLATINSERT3:%.*]] = insertelement <64 x i64> poison, i64 [[INDEX]], i64 064; CHECK-NEXT:    [[BROADCAST_SPLAT4:%.*]] = shufflevector <64 x i64> [[BROADCAST_SPLATINSERT3]], <64 x i64> poison, <64 x i32> zeroinitializer65; CHECK-NEXT:    [[VEC_IV:%.*]] = add <64 x i64> [[BROADCAST_SPLAT4]], <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15, i64 16, i64 17, i64 18, i64 19, i64 20, i64 21, i64 22, i64 23, i64 24, i64 25, i64 26, i64 27, i64 28, i64 29, i64 30, i64 31, i64 32, i64 33, i64 34, i64 35, i64 36, i64 37, i64 38, i64 39, i64 40, i64 41, i64 42, i64 43, i64 44, i64 45, i64 46, i64 47, i64 48, i64 49, i64 50, i64 51, i64 52, i64 53, i64 54, i64 55, i64 56, i64 57, i64 58, i64 59, i64 60, i64 61, i64 62, i64 63>66; CHECK-NEXT:    [[TMP2:%.*]] = icmp ule <64 x i64> [[VEC_IV]], [[BROADCAST_SPLAT]]67; CHECK-NEXT:    [[TMP3:%.*]] = add i64 [[INDEX]], 168; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]]69; CHECK-NEXT:    [[WIDE_MASKED_LOAD:%.*]] = call <64 x i8> @llvm.masked.load.v64i8.p0(ptr align 1 [[TMP4]], <64 x i1> [[TMP2]], <64 x i8> poison)70; CHECK-NEXT:    call void @llvm.masked.store.v64i8.p0(<64 x i8> [[WIDE_MASKED_LOAD]], ptr align 1 [[NEXT_GEP]], <64 x i1> [[TMP2]])71; CHECK-NEXT:    [[INDEX_NEXT]] = add i64 [[INDEX]], 6472; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]73; CHECK-NEXT:    br i1 [[TMP5]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !prof [[PROF1:![0-9]+]], !llvm.loop [[LOOP2:![0-9]+]]74; CHECK:       [[MIDDLE_BLOCK]]:75; CHECK-NEXT:    br label %[[EXIT:.*]]76; CHECK:       [[EXIT]]:77; CHECK-NEXT:    ret void78;79entry:80  br label %loop81 82loop:83  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]84  %ptr = phi ptr [ %start, %entry ], [ %ptr.next, %loop ]85  %iv.next = add i64 %iv, 186  %gep.src = getelementptr i8, ptr %src, i64 %iv.next87  %l = load i8, ptr %gep.src, align 188  %ptr.next = getelementptr i8, ptr %ptr, i64 189  store i8 %l, ptr %ptr, align 190  %exitcond = icmp eq ptr %ptr, %end91  br i1 %exitcond, label %exit, label %loop, !prof !092 93exit:94  ret void95}96 97attributes #0 = { "prefer-vector-width"="512" "target-cpu"="tigerlake" }98 99!0 = !{!"branch_weights", i32 169702549, i32 116357656}100