87 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse4.2 | FileCheck %s3 4; widen v8i8 to v16i8 (checks even power of 2 widening with add & and)5 6define void @update(ptr %dst_i, ptr %src_i, i32 %n) nounwind {7; CHECK-LABEL: update:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: subl $12, %esp10; CHECK-NEXT: movl $0, (%esp)11; CHECK-NEXT: pcmpeqd %xmm0, %xmm012; CHECK-NEXT: movdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,u,u,u,u,u,u,u,u]13; CHECK-NEXT: .p2align 414; CHECK-NEXT: .LBB0_1: # %forcond15; CHECK-NEXT: # =>This Inner Loop Header: Depth=116; CHECK-NEXT: movl (%esp), %eax17; CHECK-NEXT: cmpl {{[0-9]+}}(%esp), %eax18; CHECK-NEXT: jge .LBB0_319; CHECK-NEXT: # %bb.2: # %forbody20; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=121; CHECK-NEXT: movl (%esp), %eax22; CHECK-NEXT: leal (,%eax,8), %ecx23; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edx24; CHECK-NEXT: addl %ecx, %edx25; CHECK-NEXT: movl %edx, {{[0-9]+}}(%esp)26; CHECK-NEXT: addl {{[0-9]+}}(%esp), %ecx27; CHECK-NEXT: movl %ecx, {{[0-9]+}}(%esp)28; CHECK-NEXT: movq {{.*#+}} xmm2 = mem[0],zero29; CHECK-NEXT: psubb %xmm0, %xmm230; CHECK-NEXT: pand %xmm1, %xmm231; CHECK-NEXT: movq %xmm2, (%edx,%eax,8)32; CHECK-NEXT: incl (%esp)33; CHECK-NEXT: jmp .LBB0_134; CHECK-NEXT: .LBB0_3: # %afterfor35; CHECK-NEXT: addl $12, %esp36; CHECK-NEXT: retl37entry:38 %dst_i.addr = alloca ptr39 %src_i.addr = alloca ptr40 %n.addr = alloca i3241 %i = alloca i32, align 442 %dst = alloca ptr, align 443 %src = alloca ptr, align 444 store ptr %dst_i, ptr %dst_i.addr45 store ptr %src_i, ptr %src_i.addr46 store i32 %n, ptr %n.addr47 store i32 0, ptr %i48 br label %forcond49 50forcond:51 %tmp = load i32, ptr %i52 %tmp1 = load i32, ptr %n.addr53 %cmp = icmp slt i32 %tmp, %tmp154 br i1 %cmp, label %forbody, label %afterfor55 56forbody:57 %tmp2 = load i32, ptr %i58 %tmp3 = load ptr, ptr %dst_i.addr59 %arrayidx = getelementptr i64, ptr %tmp3, i32 %tmp260 store ptr %arrayidx, ptr %dst61 %tmp4 = load i32, ptr %i62 %tmp5 = load ptr, ptr %src_i.addr63 %arrayidx6 = getelementptr i64, ptr %tmp5, i32 %tmp464 store ptr %arrayidx6, ptr %src65 %tmp8 = load i32, ptr %i66 %tmp9 = load ptr, ptr %dst67 %arrayidx10 = getelementptr <8 x i8>, ptr %tmp9, i32 %tmp868 %tmp11 = load i32, ptr %i69 %tmp12 = load ptr, ptr %src70 %arrayidx13 = getelementptr <8 x i8>, ptr %tmp12, i32 %tmp1171 %tmp14 = load <8 x i8>, ptr %arrayidx1372 %add = add <8 x i8> %tmp14, < i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1 >73 %and = and <8 x i8> %add, < i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4 >74 store <8 x i8> %and, ptr %arrayidx1075 br label %forinc76 77forinc:78 %tmp15 = load i32, ptr %i79 %inc = add i32 %tmp15, 180 store i32 %inc, ptr %i81 br label %forcond82 83afterfor:84 ret void85}86 87