105 lines · plain
1; RUN: llc < %s -mtriple=x86_64-- -mcpu=corei7 -verify-machineinstrs | FileCheck %s2 3define void @test(ptr %a, ptr %b, i64 %c, i64 %d) nounwind {4entry:5 %ptrtoarg4 = load ptr, ptr %a, align 86 %brglist1 = getelementptr ptr, ptr %a, i64 17 %ptrtoarg25 = load ptr, ptr %brglist1, align 88 %0 = load i64, ptr %b, align 89 %1 = mul i64 %0, 410 %scevgep = getelementptr i8, ptr %ptrtoarg25, i64 %111 %2 = mul i64 %d, 412 br label %loop.cond13 14loop.cond: ; preds = %test.exit, %entry15 %asr.iv6 = phi ptr [ %29, %test.exit ], [ %scevgep, %entry ]16 %iv = phi i64 [ %0, %entry ], [ %28, %test.exit ]17 %3 = icmp eq i64 %iv, %c18 br i1 %3, label %return, label %loop19 20loop: ; preds = %loop.cond21 %4 = load ptr, ptr addrspace(256) inttoptr (i64 264 to ptr addrspace(256)), align 822 %5 = load i64, ptr %4, align 823 %vector.size.i = ashr i64 %5, 324 %num.vector.wi.i = shl i64 %vector.size.i, 325 %6 = icmp eq i64 %vector.size.i, 026 br i1 %6, label %scalarIf.i, label %dim_0_vector_pre_head.i27 28dim_0_vector_pre_head.i: ; preds = %loop29 %7 = trunc i64 %5 to i3230 %tempvector_func.i = insertelement <8 x i32> undef, i32 %7, i32 031 %vectorvector_func.i = shufflevector <8 x i32> %tempvector_func.i, <8 x i32> undef, <8 x i32> zeroinitializer32 br label %vector_kernel_entry.i33 34vector_kernel_entry.i: ; preds = %vector_kernel_entry.i, %dim_0_vector_pre_head.i35 %asr.iv9 = phi ptr [ %scevgep10, %vector_kernel_entry.i ], [ %asr.iv6, %dim_0_vector_pre_head.i ]36 %asr.iv = phi i64 [ %asr.iv.next, %vector_kernel_entry.i ], [ %vector.size.i, %dim_0_vector_pre_head.i ]37 %8 = addrspacecast ptr %ptrtoarg4 to ptr addrspace(1)38 %asr.iv911 = addrspacecast ptr %asr.iv9 to ptr addrspace(1)39 %9 = load <8 x i32>, ptr addrspace(1) %asr.iv911, align 440 %extract8vector_func.i = extractelement <8 x i32> %9, i32 041 %extract9vector_func.i = extractelement <8 x i32> %9, i32 142 %extract10vector_func.i = extractelement <8 x i32> %9, i32 243 %extract11vector_func.i = extractelement <8 x i32> %9, i32 344 %extract12vector_func.i = extractelement <8 x i32> %9, i32 445 %extract13vector_func.i = extractelement <8 x i32> %9, i32 546 %extract14vector_func.i = extractelement <8 x i32> %9, i32 647 %extract15vector_func.i = extractelement <8 x i32> %9, i32 748 %10 = atomicrmw min ptr addrspace(1) %8, i32 %extract8vector_func.i seq_cst49 %11 = atomicrmw min ptr addrspace(1) %8, i32 %extract9vector_func.i seq_cst50 %12 = atomicrmw min ptr addrspace(1) %8, i32 %extract10vector_func.i seq_cst51 %13 = atomicrmw min ptr addrspace(1) %8, i32 %extract11vector_func.i seq_cst52 %14 = atomicrmw min ptr addrspace(1) %8, i32 %extract12vector_func.i seq_cst53 %15 = atomicrmw min ptr addrspace(1) %8, i32 %extract13vector_func.i seq_cst54 %16 = atomicrmw min ptr addrspace(1) %8, i32 %extract14vector_func.i seq_cst55 %17 = atomicrmw min ptr addrspace(1) %8, i32 %extract15vector_func.i seq_cst56 store <8 x i32> %vectorvector_func.i, ptr addrspace(1) %asr.iv911, align 457 %asr.iv.next = add i64 %asr.iv, -158 %scevgep10 = getelementptr i8, ptr %asr.iv9, i64 3259 %dim_0_vector_cmp.to.max.i = icmp eq i64 %asr.iv.next, 060 br i1 %dim_0_vector_cmp.to.max.i, label %scalarIf.i, label %vector_kernel_entry.i61 62scalarIf.i: ; preds = %vector_kernel_entry.i, %loop63 %exec_wi.i = phi i64 [ 0, %loop ], [ %num.vector.wi.i, %vector_kernel_entry.i ]64 %18 = icmp eq i64 %exec_wi.i, %565 br i1 %18, label %test.exit, label %dim_0_pre_head.i66 67dim_0_pre_head.i: ; preds = %scalarIf.i68 %19 = load ptr, ptr addrspace(256) inttoptr (i64 264 to ptr addrspace(256)), align 869 %20 = load i64, ptr %19, align 870 %21 = trunc i64 %20 to i3271 %22 = mul i64 %vector.size.i, 872 br label %scalar_kernel_entry.i73 74scalar_kernel_entry.i: ; preds = %scalar_kernel_entry.i, %dim_0_pre_head.i75 %asr.iv12 = phi i64 [ %asr.iv.next13, %scalar_kernel_entry.i ], [ %22, %dim_0_pre_head.i ]76 %23 = addrspacecast ptr %asr.iv6 to ptr addrspace(1)77 %24 = addrspacecast ptr %ptrtoarg4 to ptr addrspace(1)78 %scevgep16 = getelementptr i32, ptr addrspace(1) %23, i64 %asr.iv1279 %25 = load i32, ptr addrspace(1) %scevgep16, align 480 %26 = atomicrmw min ptr addrspace(1) %24, i32 %25 seq_cst81 %scevgep15 = getelementptr i32, ptr addrspace(1) %23, i64 %asr.iv1282 store i32 %21, ptr addrspace(1) %scevgep15, align 483 %asr.iv.next13 = add i64 %asr.iv12, 184 %dim_0_cmp.to.max.i = icmp eq i64 %5, %asr.iv.next1385 br i1 %dim_0_cmp.to.max.i, label %test.exit, label %scalar_kernel_entry.i86 87test.exit: ; preds = %scalar_kernel_entry.i, %scalarIf.i88 %27 = bitcast ptr %asr.iv6 to ptr89 %28 = add i64 %iv, %d90 store i64 %28, ptr %b, align 891 %scevgep8 = getelementptr i1, ptr %27, i64 %292 %29 = bitcast ptr %scevgep8 to ptr93 br label %loop.cond94 95return: ; preds = %loop.cond96 store i64 %0, ptr %b, align 897 ret void98}99 100; CHECK: test101; CHECK: decq102; CHECK-NOT: cmpxchgl103; CHECK: jne104; CHECK: ret105