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