brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 466249d Raw
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