brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · 9e523be Raw
83 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S --passes=loop-vectorize -prefer-predicate-over-epilogue=predicate-dont-vectorize -force-vector-width=4  < %s | FileCheck %s3 4define i32 @test(ptr %vf1, i64 %n) {5; CHECK-LABEL: define i32 @test(6; CHECK-SAME: ptr [[VF1:%.*]], i64 [[N:%.*]]) {7; CHECK-NEXT:  [[ENTRY:.*:]]8; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]9; CHECK:       [[VECTOR_PH]]:10; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]11; CHECK:       [[VECTOR_BODY]]:12; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE6:.*]] ]13; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i8> [ <i8 0, i8 1, i8 2, i8 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[PRED_STORE_CONTINUE6]] ]14; CHECK-NEXT:    [[TMP0:%.*]] = icmp ule <4 x i8> [[VEC_IND]], splat (i8 -56)15; CHECK-NEXT:    [[TMP18:%.*]] = alloca i8, i64 [[N]], align 1616; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x ptr> poison, ptr [[TMP18]], i64 017; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x ptr> [[BROADCAST_SPLATINSERT]], <4 x ptr> poison, <4 x i32> zeroinitializer18; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i32 019; CHECK-NEXT:    br i1 [[TMP1]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]]20; CHECK:       [[PRED_STORE_IF]]:21; CHECK-NEXT:    [[TMP2:%.*]] = add i64 [[INDEX]], 022; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds ptr, ptr [[VF1]], i64 [[TMP2]]23; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <4 x ptr> [[BROADCAST_SPLAT]], i32 024; CHECK-NEXT:    store ptr [[TMP4]], ptr [[TMP3]], align 825; CHECK-NEXT:    br label %[[PRED_STORE_CONTINUE]]26; CHECK:       [[PRED_STORE_CONTINUE]]:27; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <4 x i1> [[TMP0]], i32 128; CHECK-NEXT:    br i1 [[TMP5]], label %[[PRED_STORE_IF1:.*]], label %[[PRED_STORE_CONTINUE2:.*]]29; CHECK:       [[PRED_STORE_IF1]]:30; CHECK-NEXT:    [[TMP6:%.*]] = add i64 [[INDEX]], 131; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr inbounds ptr, ptr [[VF1]], i64 [[TMP6]]32; CHECK-NEXT:    [[TMP8:%.*]] = extractelement <4 x ptr> [[BROADCAST_SPLAT]], i32 033; CHECK-NEXT:    store ptr [[TMP8]], ptr [[TMP7]], align 834; CHECK-NEXT:    br label %[[PRED_STORE_CONTINUE2]]35; CHECK:       [[PRED_STORE_CONTINUE2]]:36; CHECK-NEXT:    [[TMP9:%.*]] = extractelement <4 x i1> [[TMP0]], i32 237; CHECK-NEXT:    br i1 [[TMP9]], label %[[PRED_STORE_IF3:.*]], label %[[PRED_STORE_CONTINUE4:.*]]38; CHECK:       [[PRED_STORE_IF3]]:39; CHECK-NEXT:    [[TMP10:%.*]] = add i64 [[INDEX]], 240; CHECK-NEXT:    [[TMP11:%.*]] = getelementptr inbounds ptr, ptr [[VF1]], i64 [[TMP10]]41; CHECK-NEXT:    [[TMP12:%.*]] = extractelement <4 x ptr> [[BROADCAST_SPLAT]], i32 042; CHECK-NEXT:    store ptr [[TMP12]], ptr [[TMP11]], align 843; CHECK-NEXT:    br label %[[PRED_STORE_CONTINUE4]]44; CHECK:       [[PRED_STORE_CONTINUE4]]:45; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <4 x i1> [[TMP0]], i32 346; CHECK-NEXT:    br i1 [[TMP13]], label %[[PRED_STORE_IF5:.*]], label %[[PRED_STORE_CONTINUE6]]47; CHECK:       [[PRED_STORE_IF5]]:48; CHECK-NEXT:    [[TMP14:%.*]] = add i64 [[INDEX]], 349; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr inbounds ptr, ptr [[VF1]], i64 [[TMP14]]50; CHECK-NEXT:    [[TMP16:%.*]] = extractelement <4 x ptr> [[BROADCAST_SPLAT]], i32 051; CHECK-NEXT:    store ptr [[TMP16]], ptr [[TMP15]], align 852; CHECK-NEXT:    br label %[[PRED_STORE_CONTINUE6]]53; CHECK:       [[PRED_STORE_CONTINUE6]]:54; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 455; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i8> [[VEC_IND]], splat (i8 4)56; CHECK-NEXT:    [[TMP17:%.*]] = icmp eq i64 [[INDEX_NEXT]], 20457; CHECK-NEXT:    br i1 [[TMP17]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]58; CHECK:       [[MIDDLE_BLOCK]]:59; CHECK-NEXT:    br label %[[EXIT:.*]]60; CHECK:       [[EXIT]]:61; CHECK-NEXT:    ret i32 062;63entry:64  br label %for.body65 66for.body:67  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]68  %0 = alloca i8, i64 %n, align 1669  %arrayidx = getelementptr inbounds ptr, ptr %vf1, i64 %indvars.iv70  store ptr %0, ptr %arrayidx, align 871  %indvars.iv.next = add i64 %indvars.iv, 172  %exitcond.not = icmp eq i64 %indvars.iv, 20073  br i1 %exitcond.not, label %exit, label %for.body74 75exit:76  ret i32 077}78;.79; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}80; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}81; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}82;.83