brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · f2d6834 Raw
58 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 -force-vector-width=2 -force-widen-divrem-via-safe-divisor=false -S %s | FileCheck %s3 4; Make sure we don't try to fold a Instruction::ExtractElement ir<0>, ir<0>,5; since we can't materialize the live-in for the vector operand.6 7define void @pr154045(ptr %p, i1 %c, i64 %x) {8; CHECK-LABEL: define void @pr154045(9; CHECK-SAME: ptr [[P:%.*]], i1 [[C:%.*]], i64 [[X:%.*]]) {10; CHECK-NEXT:  [[ENTRY:.*:]]11; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]12; CHECK:       [[VECTOR_PH]]:13; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x i1> poison, i1 [[C]], i64 014; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x i1> [[BROADCAST_SPLATINSERT]], <2 x i1> poison, <2 x i32> zeroinitializer15; CHECK-NEXT:    [[TMP0:%.*]] = xor <2 x i1> [[BROADCAST_SPLAT]], splat (i1 true)16; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]17; CHECK:       [[VECTOR_BODY]]:18; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <2 x i1> [[TMP0]], i32 019; CHECK-NEXT:    br i1 [[TMP1]], label %[[PRED_SREM_IF:.*]], label %[[PRED_SREM_CONTINUE:.*]]20; CHECK:       [[PRED_SREM_IF]]:21; CHECK-NEXT:    br label %[[PRED_SREM_CONTINUE]]22; CHECK:       [[PRED_SREM_CONTINUE]]:23; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <2 x i1> [[TMP0]], i32 124; CHECK-NEXT:    br i1 [[TMP2]], label %[[PRED_SREM_IF1:.*]], label %[[PRED_SREM_CONTINUE2:.*]]25; CHECK:       [[PRED_SREM_IF1]]:26; CHECK-NEXT:    br label %[[PRED_SREM_CONTINUE2]]27; CHECK:       [[PRED_SREM_CONTINUE2]]:28; CHECK-NEXT:    store i32 0, ptr [[P]], align 429; CHECK-NEXT:    br label %[[MIDDLE_BLOCK:.*]]30; CHECK:       [[MIDDLE_BLOCK]]:31; CHECK-NEXT:    br label %[[EXIT:.*]]32; CHECK:       [[EXIT]]:33; CHECK-NEXT:    ret void34;35entry:36  br label %loop37 38loop:39  %iv = phi i64 [ 0, %entry ], [ %iv.next, %latch ]40  br i1 %c, label %latch, label %else41 42else:43  %rem = srem i64 0, %x44  br label %latch45 46latch:47  %phi = phi i64 [ %rem, %else ], [ 0, %loop ]48  %phi.trunc = trunc i64 %phi to i3249  %shl = shl i32 %phi.trunc, 050  store i32 %shl, ptr %p51  %iv.next = add i64 %iv, 152  %exitcond = icmp eq i64 %iv, 153  br i1 %exitcond, label %exit, label %loop54 55exit:56  ret void57}58