brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 70b05ac Raw
89 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -p loop-vectorize -S %s | FileCheck %s3 4target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-linux-gnu"6 7; Test for https://github.com/llvm/llvm-project/issues/1110408define void @smax_call_uniform(ptr %dst, i64 %x) {9; CHECK-LABEL: define void @smax_call_uniform(10; CHECK-SAME: ptr [[DST:%.*]], i64 [[X:%.*]]) {11; CHECK-NEXT:  [[ENTRY:.*:]]12; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 -68, -6913; CHECK-NEXT:    [[MUL:%.*]] = mul nuw nsw i64 [[X]], 014; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]15; CHECK:       [[VECTOR_PH]]:16; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x i1> poison, i1 [[C]], i64 017; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x i1> [[BROADCAST_SPLATINSERT]], <2 x i1> poison, <2 x i32> zeroinitializer18; CHECK-NEXT:    [[TMP1:%.*]] = xor <2 x i1> [[BROADCAST_SPLAT]], splat (i1 true)19; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]20; CHECK:       [[VECTOR_BODY]]:21; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_UREM_CONTINUE6:.*]] ]22; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <2 x i1> [[TMP1]], i32 023; CHECK-NEXT:    br i1 [[TMP2]], label %[[PRED_UREM_IF:.*]], label %[[PRED_UREM_CONTINUE:.*]]24; CHECK:       [[PRED_UREM_IF]]:25; CHECK-NEXT:    br label %[[PRED_UREM_CONTINUE]]26; CHECK:       [[PRED_UREM_CONTINUE]]:27; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <2 x i1> [[TMP1]], i32 128; CHECK-NEXT:    br i1 [[TMP5]], label %[[PRED_UREM_IF1:.*]], label %[[PRED_UREM_CONTINUE2:.*]]29; CHECK:       [[PRED_UREM_IF1]]:30; CHECK-NEXT:    br label %[[PRED_UREM_CONTINUE2]]31; CHECK:       [[PRED_UREM_CONTINUE2]]:32; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <2 x i1> [[TMP1]], i32 033; CHECK-NEXT:    br i1 [[TMP7]], label %[[PRED_UREM_IF3:.*]], label %[[PRED_UREM_CONTINUE4:.*]]34; CHECK:       [[PRED_UREM_IF3]]:35; CHECK-NEXT:    br label %[[PRED_UREM_CONTINUE4]]36; CHECK:       [[PRED_UREM_CONTINUE4]]:37; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <2 x i1> [[TMP1]], i32 138; CHECK-NEXT:    br i1 [[TMP10]], label %[[PRED_UREM_IF5:.*]], label %[[PRED_UREM_CONTINUE6]]39; CHECK:       [[PRED_UREM_IF5]]:40; CHECK-NEXT:    br label %[[PRED_UREM_CONTINUE6]]41; CHECK:       [[PRED_UREM_CONTINUE6]]:42; CHECK-NEXT:    [[TMP13:%.*]] = tail call i64 @llvm.smax.i64(i64 0, i64 0)43; CHECK-NEXT:    [[PREDPHI7:%.*]] = select i1 [[C]], i64 1, i64 [[TMP13]]44; CHECK-NEXT:    [[TMP17:%.*]] = add i64 [[PREDPHI7]], 145; CHECK-NEXT:    [[TMP19:%.*]] = getelementptr i64, ptr [[DST]], i64 [[TMP17]]46; CHECK-NEXT:    store i64 0, ptr [[TMP19]], align 847; CHECK-NEXT:    store i64 0, ptr [[TMP19]], align 848; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 449; CHECK-NEXT:    [[TMP20:%.*]] = icmp eq i64 [[INDEX_NEXT]], 102450; CHECK-NEXT:    br i1 [[TMP20]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]51; CHECK:       [[MIDDLE_BLOCK]]:52; CHECK-NEXT:    br label %[[EXIT:.*]]53; CHECK:       [[EXIT]]:54; CHECK-NEXT:    ret void55;56entry:57  %c = icmp ult i8 -68, -6958  %mul = mul nsw nuw i64 %x, 059  br label %loop.header60 61loop.header:62  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]63  br i1 %c, label %loop.latch, label %else64 65else:66  %rem = urem i64 %mul, %x67  %smax = tail call i64 @llvm.smax.i64(i64 %rem, i64 0)68  br label %loop.latch69 70loop.latch:71  %p = phi i64 [ 1, %loop.header ], [ %smax, %else ]72  %add = add i64 %p, 173  %gep = getelementptr i64, ptr %dst, i64 %add74  store i64 0, ptr %gep, align 875  %iv.next = add i64 %iv, 176  %ec = icmp eq i64 %iv.next, 102477  br i1 %ec, label %exit, label %loop.header78 79exit:80  ret void81}82 83declare i64 @llvm.smax.i64(i64, i64)84;.85; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}86; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}87; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}88;.89