brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 9dfb987 Raw
80 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -p loop-vectorize -force-vector-width=4 -S %s | FileCheck %s3 4target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128-Fn32"5target triple = "arm64-apple-macosx14.0.0"6 7; Test for https://github.com/llvm/llvm-project/issues/109510.8define i32 @test_invariant_replicate_region(i32 %x, i1 %c) {9; CHECK-LABEL: define i32 @test_invariant_replicate_region(10; CHECK-SAME: i32 [[X:%.*]], i1 [[C:%.*]]) {11; CHECK-NEXT:  [[ENTRY:.*:]]12; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]13; CHECK:       [[VECTOR_PH]]:14; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]15; CHECK:       [[VECTOR_BODY]]:16; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_UREM_CONTINUE6:.*]] ]17; CHECK-NEXT:    br i1 [[C]], label %[[PRED_UREM_IF:.*]], label %[[PRED_UREM_CONTINUE:.*]]18; CHECK:       [[PRED_UREM_IF]]:19; CHECK-NEXT:    [[TMP1:%.*]] = urem i32 10, [[X]]20; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <4 x i32> poison, i32 [[TMP1]], i32 021; CHECK-NEXT:    br label %[[PRED_UREM_CONTINUE]]22; CHECK:       [[PRED_UREM_CONTINUE]]:23; CHECK-NEXT:    [[TMP3:%.*]] = phi <4 x i32> [ poison, %[[VECTOR_BODY]] ], [ [[TMP2]], %[[PRED_UREM_IF]] ]24; CHECK-NEXT:    br i1 [[C]], label %[[PRED_UREM_IF1:.*]], label %[[PRED_UREM_CONTINUE2:.*]]25; CHECK:       [[PRED_UREM_IF1]]:26; CHECK-NEXT:    [[TMP5:%.*]] = urem i32 10, [[X]]27; CHECK-NEXT:    [[TMP6:%.*]] = insertelement <4 x i32> [[TMP3]], i32 [[TMP5]], i32 128; CHECK-NEXT:    br label %[[PRED_UREM_CONTINUE2]]29; CHECK:       [[PRED_UREM_CONTINUE2]]:30; CHECK-NEXT:    [[TMP7:%.*]] = phi <4 x i32> [ [[TMP3]], %[[PRED_UREM_CONTINUE]] ], [ [[TMP6]], %[[PRED_UREM_IF1]] ]31; CHECK-NEXT:    br i1 [[C]], label %[[PRED_UREM_IF3:.*]], label %[[PRED_UREM_CONTINUE4:.*]]32; CHECK:       [[PRED_UREM_IF3]]:33; CHECK-NEXT:    [[TMP9:%.*]] = urem i32 10, [[X]]34; CHECK-NEXT:    [[TMP10:%.*]] = insertelement <4 x i32> [[TMP7]], i32 [[TMP9]], i32 235; CHECK-NEXT:    br label %[[PRED_UREM_CONTINUE4]]36; CHECK:       [[PRED_UREM_CONTINUE4]]:37; CHECK-NEXT:    [[TMP11:%.*]] = phi <4 x i32> [ [[TMP7]], %[[PRED_UREM_CONTINUE2]] ], [ [[TMP10]], %[[PRED_UREM_IF3]] ]38; CHECK-NEXT:    br i1 [[C]], label %[[PRED_UREM_IF5:.*]], label %[[PRED_UREM_CONTINUE6]]39; CHECK:       [[PRED_UREM_IF5]]:40; CHECK-NEXT:    [[TMP13:%.*]] = urem i32 10, [[X]]41; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <4 x i32> [[TMP11]], i32 [[TMP13]], i32 342; CHECK-NEXT:    br label %[[PRED_UREM_CONTINUE6]]43; CHECK:       [[PRED_UREM_CONTINUE6]]:44; CHECK-NEXT:    [[TMP12:%.*]] = phi <4 x i32> [ [[TMP11]], %[[PRED_UREM_CONTINUE4]] ], [ [[TMP14]], %[[PRED_UREM_IF5]] ]45; CHECK-NEXT:    [[PREDPHI:%.*]] = select i1 [[C]], <4 x i32> [[TMP12]], <4 x i32> zeroinitializer46; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 447; CHECK-NEXT:    [[TMP16:%.*]] = icmp eq i32 [[INDEX_NEXT]], 10048; CHECK-NEXT:    br i1 [[TMP16]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]49; CHECK:       [[MIDDLE_BLOCK]]:50; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <4 x i32> [[PREDPHI]], i32 351; CHECK-NEXT:    br label %[[EXIT:.*]]52; CHECK:       [[EXIT]]:53; CHECK-NEXT:    ret i32 [[TMP17]]54;55entry:56  br label %loop.header57 58loop.header:59  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]60  br i1 %c, label %then, label %loop.latch61 62then:63  %rem.1 = urem i32 10, %x64  br label %loop.latch65 66loop.latch:67  %res = phi i32 [ 0, %loop.header ], [ %rem.1, %then ]68  %iv.next = add i32 %iv, 169  %ec = icmp eq i32 %iv, 9970  br i1 %ec, label %exit, label %loop.header71 72exit:73  ret i32 %res74}75;.76; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}77; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}78; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}79;.80