1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-linux -mcpu=penryn -o - | FileCheck %s --check-prefix=X64 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=yonah -march=x86 -mtriple=i386-linux-gnu -o - | FileCheck %s --check-prefix=X32 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; PR7518 6*9880d681SAndroid Build Coastguard Workerdefine void @test1(<2 x float> %Q, float *%P2) nounwind { 7*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test1: 8*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 9*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 10*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addss %xmm0, %xmm1 11*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movss %xmm1, (%rdi) 12*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 13*9880d681SAndroid Build Coastguard Worker; 14*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test1: 15*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 16*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 17*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 18*9880d681SAndroid Build Coastguard Worker; X32-NEXT: addss %xmm0, %xmm1 19*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movss %xmm1, (%eax) 20*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 21*9880d681SAndroid Build Coastguard Worker %a = extractelement <2 x float> %Q, i32 0 22*9880d681SAndroid Build Coastguard Worker %b = extractelement <2 x float> %Q, i32 1 23*9880d681SAndroid Build Coastguard Worker %c = fadd float %a, %b 24*9880d681SAndroid Build Coastguard Worker store float %c, float* %P2 25*9880d681SAndroid Build Coastguard Worker ret void 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test2(<2 x float> %Q, <2 x float> %R, <2 x float> *%P) nounwind { 29*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test2: 30*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 31*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addps %xmm1, %xmm0 32*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 33*9880d681SAndroid Build Coastguard Worker; 34*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test2: 35*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 36*9880d681SAndroid Build Coastguard Worker; X32-NEXT: addps %xmm1, %xmm0 37*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 38*9880d681SAndroid Build Coastguard Worker %Z = fadd <2 x float> %Q, %R 39*9880d681SAndroid Build Coastguard Worker ret <2 x float> %Z 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test3(<4 x float> %A) nounwind { 43*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test3: 44*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 45*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addps %xmm0, %xmm0 46*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 47*9880d681SAndroid Build Coastguard Worker; 48*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test3: 49*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 50*9880d681SAndroid Build Coastguard Worker; X32-NEXT: addps %xmm0, %xmm0 51*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 52*9880d681SAndroid Build Coastguard Worker %B = shufflevector <4 x float> %A, <4 x float> undef, <2 x i32> <i32 0, i32 1> 53*9880d681SAndroid Build Coastguard Worker %C = fadd <2 x float> %B, %B 54*9880d681SAndroid Build Coastguard Worker ret <2 x float> %C 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test4(<2 x float> %A) nounwind { 58*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test4: 59*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 60*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addps %xmm0, %xmm0 61*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 62*9880d681SAndroid Build Coastguard Worker; 63*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test4: 64*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 65*9880d681SAndroid Build Coastguard Worker; X32-NEXT: addps %xmm0, %xmm0 66*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 67*9880d681SAndroid Build Coastguard Worker %C = fadd <2 x float> %A, %A 68*9880d681SAndroid Build Coastguard Worker ret <2 x float> %C 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test5(<4 x float> %A) nounwind { 72*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test5: 73*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 74*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addps %xmm0, %xmm0 75*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addps %xmm0, %xmm0 76*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 77*9880d681SAndroid Build Coastguard Worker; 78*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test5: 79*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 80*9880d681SAndroid Build Coastguard Worker; X32-NEXT: addps %xmm0, %xmm0 81*9880d681SAndroid Build Coastguard Worker; X32-NEXT: addps %xmm0, %xmm0 82*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 83*9880d681SAndroid Build Coastguard Worker %B = shufflevector <4 x float> %A, <4 x float> undef, <2 x i32> <i32 0, i32 1> 84*9880d681SAndroid Build Coastguard Worker %C = fadd <2 x float> %B, %B 85*9880d681SAndroid Build Coastguard Worker br label %BB 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard WorkerBB: 88*9880d681SAndroid Build Coastguard Worker %D = fadd <2 x float> %C, %C 89*9880d681SAndroid Build Coastguard Worker %E = shufflevector <2 x float> %D, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> 90*9880d681SAndroid Build Coastguard Worker ret <4 x float> %E 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker 94