brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 63f8036 Raw
95 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --version 52; RUN: opt -p loop-vectorize -S %s | FileCheck %s3 4; If a FOR isn't used the VPInstruction::FirstOrderRecurrenceSplice will be dead5; and won't be costed in the VPlan cost model. Make sure we account for this6; simplifcation in comparison to the legacy cost model.7 8target triple = "x86_64"9 10define void @no_use() {11; CHECK-LABEL: define void @no_use() {12; CHECK-NEXT:  [[ENTRY:.*:]]13; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]14; CHECK:       [[VECTOR_PH]]:15; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]16; CHECK:       [[VECTOR_BODY]]:17; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]18; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY]] ]19; CHECK-NEXT:    [[STEP_ADD:%.*]] = add <4 x i32> [[VEC_IND]], splat (i32 4)20; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 821; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i32> [[STEP_ADD]], splat (i32 4)22; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i32 [[INDEX_NEXT]], 4023; CHECK-NEXT:    br i1 [[TMP0]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]24; CHECK:       [[MIDDLE_BLOCK]]:25; CHECK-NEXT:    [[VECTOR_RECUR_EXTRACT:%.*]] = extractelement <4 x i32> [[STEP_ADD]], i32 326; CHECK-NEXT:    br label %[[SCALAR_PH:.*]]27; CHECK:       [[SCALAR_PH]]:28; CHECK-NEXT:    br label %[[LOOP:.*]]29; CHECK:       [[LOOP]]:30; CHECK-NEXT:    [[FOR:%.*]] = phi i32 [ [[VECTOR_RECUR_EXTRACT]], %[[SCALAR_PH]] ], [ [[E_0_I:%.*]], %[[LOOP]] ]31; CHECK-NEXT:    [[E_0_I]] = phi i32 [ 40, %[[SCALAR_PH]] ], [ [[INC_I:%.*]], %[[LOOP]] ]32; CHECK-NEXT:    [[INC_I]] = add i32 [[E_0_I]], 133; CHECK-NEXT:    [[EXITCOND_NOT_I:%.*]] = icmp eq i32 [[E_0_I]], 4334; CHECK-NEXT:    br i1 [[EXITCOND_NOT_I]], label %[[EXIT:.*]], label %[[LOOP]], !llvm.loop [[LOOP3:![0-9]+]]35; CHECK:       [[EXIT]]:36; CHECK-NEXT:    ret void37;38entry:39  br label %loop40 41loop:42  %for = phi i32 [ 0, %entry ], [ %iv, %loop ]43  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]44  %iv.next = add i32 %iv, 145  %exitcond.not.i = icmp eq i32 %iv, 4346  br i1 %exitcond.not.i, label %exit, label %loop47 48exit:49  ret void50}51 52define void @dead_use() {53; CHECK-LABEL: define void @dead_use() {54; CHECK-NEXT:  [[ENTRY:.*:]]55; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]56; CHECK:       [[VECTOR_PH]]:57; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]58; CHECK:       [[VECTOR_BODY]]:59; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]60; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY]] ]61; CHECK-NEXT:    [[STEP_ADD:%.*]] = add <4 x i32> [[VEC_IND]], splat (i32 4)62; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 863; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i32> [[STEP_ADD]], splat (i32 4)64; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i32 [[INDEX_NEXT]], 4065; CHECK-NEXT:    br i1 [[TMP0]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]66; CHECK:       [[MIDDLE_BLOCK]]:67; CHECK-NEXT:    [[VECTOR_RECUR_EXTRACT:%.*]] = extractelement <4 x i32> [[STEP_ADD]], i32 368; CHECK-NEXT:    br label %[[SCALAR_PH:.*]]69; CHECK:       [[SCALAR_PH]]:70; CHECK-NEXT:    br label %[[LOOP:.*]]71; CHECK:       [[LOOP]]:72; CHECK-NEXT:    [[D_0_I:%.*]] = phi i32 [ [[VECTOR_RECUR_EXTRACT]], %[[SCALAR_PH]] ], [ [[E_0_I:%.*]], %[[LOOP]] ]73; CHECK-NEXT:    [[E_0_I]] = phi i32 [ 40, %[[SCALAR_PH]] ], [ [[INC_I:%.*]], %[[LOOP]] ]74; CHECK-NEXT:    [[DEAD:%.*]] = add i32 [[D_0_I]], 175; CHECK-NEXT:    [[INC_I]] = add i32 [[E_0_I]], 176; CHECK-NEXT:    [[EXITCOND_NOT_I:%.*]] = icmp eq i32 [[E_0_I]], 4377; CHECK-NEXT:    br i1 [[EXITCOND_NOT_I]], label %[[EXIT:.*]], label %[[LOOP]], !llvm.loop [[LOOP5:![0-9]+]]78; CHECK:       [[EXIT]]:79; CHECK-NEXT:    ret void80;81entry:82  br label %loop83 84loop:85  %for = phi i32 [ 0, %entry ], [ %iv, %loop ]86  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]87  %dead = add i32 %for, 188  %iv.next = add i32 %iv, 189  %exitcond.not.i = icmp eq i32 %iv, 4390  br i1 %exitcond.not.i, label %exit, label %loop91 92exit:93  ret void94}95