brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 8609f30 Raw
92 lines · plain
1; RUN: opt < %s -mattr=+mve,+mve.fp -passes=loop-vectorize -tail-predication=disabled -S | FileCheck %s --check-prefixes=DEFAULT2; RUN: opt < %s -mattr=+mve,+mve.fp -passes=loop-vectorize -prefer-predicate-over-epilogue=predicate-else-scalar-epilogue -S | FileCheck %s --check-prefixes=TAILPRED3 4target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"5target triple = "thumbv8.1m.main-arm-none-eabi"6 7; When TP is disabled, this test can vectorize with a VF of 16.8; When TP is enabled, this test should vectorize with a VF of 8.9;10; DEFAULT: load <16 x i8>, ptr11; DEFAULT: sext <16 x i8> %{{.*}} to <16 x i16>12; DEFAULT: add <16 x i16>13; DEFAULT-NOT: llvm.masked.load14; DEFAULT-NOT: llvm.masked.store15;16; TAILPRED: llvm.masked.load.v8i8.p017; TAILPRED: sext <8 x i8> %{{.*}} to <8 x i16>18; TAILPRED: add <8 x i16>19; TAILPRED: call void @llvm.masked.store.v8i8.p020; TAILPRED-NOT: load <16 x i8>, ptr21 22define i32 @tp_reduces_vf(ptr nocapture %0, i32 %1, ptr %input) {23  %3 = load ptr, ptr %input, align 824  %4 = sext i32 %1 to i6425  %5 = icmp eq i32 %1, 026  br i1 %5, label %._crit_edge, label %.preheader47.preheader27 28.preheader47.preheader:29  br label %.preheader4730 31.preheader47:32  %.050 = phi i64 [ %54, %53 ], [ 0, %.preheader47.preheader ]33  br label %.preheader34 35._crit_edge.loopexit:36  br label %._crit_edge37 38._crit_edge:39  ret i32 040 41.preheader:42  %indvars.iv51 = phi i32 [ 1, %.preheader47 ], [ %indvars.iv.next52, %52 ]43  %6 = mul nuw nsw i32 %indvars.iv51, 32044  br label %745 467:47  %indvars.iv = phi i32 [ 1, %.preheader ], [ %indvars.iv.next, %7 ]48  %8 = add nuw nsw i32 %6, %indvars.iv49  %17 = add nsw i32 %8, -31950  %18 = getelementptr inbounds i8, ptr %3, i32 %1751  %19 = load i8, ptr %18, align 152  %20 = sext i8 %19 to i3253  %25 = getelementptr inbounds i8, ptr %3, i32 %854  %26 = load i8, ptr %25, align 155  %27 = sext i8 %26 to i3256  %28 = mul nsw i32 %27, 25557  %29 = add nuw nsw i32 %8, 158  %30 = getelementptr inbounds i8, ptr %3, i32 %2959  %31 = load i8, ptr %30, align 160  %32 = sext i8 %31 to i3261  %33 = add nuw nsw i32 %8, 32062  %38 = getelementptr inbounds i8, ptr %3, i32 %3363  %39 = load i8, ptr %38, align 164  %40 = sext i8 %39 to i3265  %reass.add = add nsw i32 %20, %2066  %reass.add44 = add nsw i32 %reass.add, %2067  %reass.add45 = add nsw i32 %reass.add44, %2068  %45 = add nsw i32 %reass.add45, %3269  %46 = add nsw i32 %45, %3270  %47 = add nsw i32 %46, %4071  %reass.add46 = add nsw i32 %47, %4072  %reass.mul = mul nsw i32 %reass.add46, -2873  %48 = add nsw i32 %reass.mul, %2874  %49 = lshr i32 %48, 875  %50 = trunc i32 %49 to i876  %51 = getelementptr inbounds i8, ptr %0, i32 %877  store i8 %50, ptr %51, align 178  %indvars.iv.next = add nuw nsw i32 %indvars.iv, 179  %exitcond = icmp eq i32 %indvars.iv.next, 31980  br i1 %exitcond, label %52, label %781 8252:83  %indvars.iv.next52 = add nuw nsw i32 %indvars.iv51, 184  %exitcond53 = icmp eq i32 %indvars.iv.next52, 23985  br i1 %exitcond53, label %53, label %.preheader86 8753:88  %54 = add nuw i64 %.050, 189  %55 = icmp ult i64 %54, %490  br i1 %55, label %.preheader47, label %._crit_edge.loopexit91}92