brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 260b87c Raw
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