80 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s3 4; widen a v3i32 to v4i32 to do a vector multiple and a subtraction5 6define void @update(ptr %dst, ptr %src, i32 %n) nounwind {7; CHECK-LABEL: update:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)10; CHECK-NEXT: movq %rsi, -{{[0-9]+}}(%rsp)11; CHECK-NEXT: movl %edx, -{{[0-9]+}}(%rsp)12; CHECK-NEXT: movabsq $4294967297, %rax # imm = 0x10000000113; CHECK-NEXT: movq %rax, -{{[0-9]+}}(%rsp)14; CHECK-NEXT: movl $1, -{{[0-9]+}}(%rsp)15; CHECK-NEXT: movl $0, -{{[0-9]+}}(%rsp)16; CHECK-NEXT: pmovsxbd {{.*#+}} xmm0 = [3,3,3,3]17; CHECK-NEXT: .p2align 418; CHECK-NEXT: .LBB0_1: # %forcond19; CHECK-NEXT: # =>This Inner Loop Header: Depth=120; CHECK-NEXT: movl -{{[0-9]+}}(%rsp), %eax21; CHECK-NEXT: cmpl -{{[0-9]+}}(%rsp), %eax22; CHECK-NEXT: jge .LBB0_323; CHECK-NEXT: # %bb.2: # %forbody24; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=125; CHECK-NEXT: movslq -{{[0-9]+}}(%rsp), %rax26; CHECK-NEXT: movq -{{[0-9]+}}(%rsp), %rcx27; CHECK-NEXT: shlq $4, %rax28; CHECK-NEXT: movq -{{[0-9]+}}(%rsp), %rdx29; CHECK-NEXT: movdqa (%rdx,%rax), %xmm130; CHECK-NEXT: pslld $2, %xmm131; CHECK-NEXT: psubd %xmm0, %xmm132; CHECK-NEXT: pextrd $2, %xmm1, 8(%rcx,%rax)33; CHECK-NEXT: movq %xmm1, (%rcx,%rax)34; CHECK-NEXT: incl -{{[0-9]+}}(%rsp)35; CHECK-NEXT: jmp .LBB0_136; CHECK-NEXT: .LBB0_3: # %afterfor37; CHECK-NEXT: retq38entry:39 %dst.addr = alloca ptr40 %src.addr = alloca ptr41 %n.addr = alloca i3242 %v = alloca <3 x i32>, align 1643 %i = alloca i32, align 444 store ptr %dst, ptr %dst.addr45 store ptr %src, ptr %src.addr46 store i32 %n, ptr %n.addr47 store <3 x i32> < i32 1, i32 1, i32 1 >, ptr %v48 store i32 0, ptr %i49 br label %forcond50 51forcond:52 %tmp = load i32, ptr %i53 %tmp1 = load i32, ptr %n.addr54 %cmp = icmp slt i32 %tmp, %tmp155 br i1 %cmp, label %forbody, label %afterfor56 57forbody:58 %tmp2 = load i32, ptr %i59 %tmp3 = load ptr, ptr %dst.addr60 %arrayidx = getelementptr <3 x i32>, ptr %tmp3, i32 %tmp261 %tmp4 = load i32, ptr %i62 %tmp5 = load ptr, ptr %src.addr63 %arrayidx6 = getelementptr <3 x i32>, ptr %tmp5, i32 %tmp464 %tmp7 = load <3 x i32>, ptr %arrayidx665 %mul = mul <3 x i32> %tmp7, < i32 4, i32 4, i32 4 >66 %sub = sub <3 x i32> %mul, < i32 3, i32 3, i32 3 >67 store <3 x i32> %sub, ptr %arrayidx68 br label %forinc69 70forinc:71 %tmp8 = load i32, ptr %i72 %inc = add i32 %tmp8, 173 store i32 %inc, ptr %i74 br label %forcond75 76afterfor:77 ret void78}79 80