Re-implement the main strength-reduction portion of LoopStrengthReduction.
[oota-llvm.git] / test / CodeGen / X86 / splat-scalar-load.ll
1 ; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=+sse2 | FileCheck %s
2 ; rdar://7434544
3
4 define <2 x i64> @t1() nounwind ssp {
5 entry:
6 ; CHECK: t1:
7 ; CHECK: pshufd $0, (%esp), %xmm0
8   %array = alloca [8 x float], align 16
9   %arrayidx = getelementptr inbounds [8 x float]* %array, i32 0, i32 0
10   %tmp2 = load float* %arrayidx
11   %vecinit = insertelement <4 x float> undef, float %tmp2, i32 0
12   %vecinit5 = insertelement <4 x float> %vecinit, float %tmp2, i32 1
13   %vecinit7 = insertelement <4 x float> %vecinit5, float %tmp2, i32 2
14   %vecinit9 = insertelement <4 x float> %vecinit7, float %tmp2, i32 3
15   %0 = bitcast <4 x float> %vecinit9 to <2 x i64>
16   ret <2 x i64> %0
17 }
18
19 define <2 x i64> @t2() nounwind ssp {
20 entry:
21 ; CHECK: t2:
22 ; CHECK: pshufd $85, (%esp), %xmm0
23   %array = alloca [8 x float], align 4
24   %arrayidx = getelementptr inbounds [8 x float]* %array, i32 0, i32 1
25   %tmp2 = load float* %arrayidx
26   %vecinit = insertelement <4 x float> undef, float %tmp2, i32 0
27   %vecinit5 = insertelement <4 x float> %vecinit, float %tmp2, i32 1
28   %vecinit7 = insertelement <4 x float> %vecinit5, float %tmp2, i32 2
29   %vecinit9 = insertelement <4 x float> %vecinit7, float %tmp2, i32 3
30   %0 = bitcast <4 x float> %vecinit9 to <2 x i64>
31   ret <2 x i64> %0
32 }
33
34 define <4 x float> @t3(float %tmp1, float %tmp2, float %tmp3) nounwind readnone ssp {
35 entry:
36 ; CHECK: t3:
37 ; CHECK: pshufd $-86, (%esp), %xmm0
38   %0 = insertelement <4 x float> undef, float %tmp3, i32 0
39   %1 = insertelement <4 x float> %0, float %tmp3, i32 1
40   %2 = insertelement <4 x float> %1, float %tmp3, i32 2
41   %3 = insertelement <4 x float> %2, float %tmp3, i32 3
42   ret <4 x float> %3
43 }