~ubuntu-branches/ubuntu/quantal/llvm-3.1/quantal

« back to all changes in this revision

Viewing changes to test/CodeGen/X86/avx-shuffle.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2012-03-29 19:09:51 UTC
  • Revision ID: package-import@ubuntu.com-20120329190951-aq83ivog4cg8bxun
Tags: upstream-3.1~svn153643
ImportĀ upstreamĀ versionĀ 3.1~svn153643

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -mattr=+avx | FileCheck %s
 
2
 
 
3
; PR11102
 
4
define <4 x float> @test1(<4 x float> %a) nounwind {
 
5
  %b = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <4 x i32> <i32 2, i32 5, i32 undef, i32 undef>
 
6
  ret <4 x float> %b
 
7
; CHECK: test1:
 
8
; CHECK: vshufps
 
9
; CHECK: vpermilps
 
10
}
 
11
 
 
12
; rdar://10538417
 
13
define <3 x i64> @test2(<2 x i64> %v) nounwind readnone {
 
14
; CHECK: test2:
 
15
; CHECK: vinsertf128
 
16
  %1 = shufflevector <2 x i64> %v, <2 x i64> %v, <3 x i32> <i32 0, i32 1, i32 undef>
 
17
  %2 = shufflevector <3 x i64> zeroinitializer, <3 x i64> %1, <3 x i32> <i32 3, i32 4, i32 2>
 
18
  ret <3 x i64> %2
 
19
; CHECK: ret
 
20
}
 
21
 
 
22
define <4 x i64> @test3(<4 x i64> %a, <4 x i64> %b) nounwind {
 
23
  %c = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 5, i32 2, i32 undef>
 
24
  ret <4 x i64> %c
 
25
; CHECK: test3:
 
26
; CHECK: vperm2f128
 
27
; CHECK: ret
 
28
}
 
29
 
 
30
define <8 x float> @test4(float %a) nounwind {
 
31
  %b = insertelement <8 x float> zeroinitializer, float %a, i32 0
 
32
  ret <8 x float> %b
 
33
; CHECK: test4:
 
34
; CHECK: vinsertf128
 
35
}
 
36
 
 
37
; rdar://10594409
 
38
define <8 x float> @test5(float* nocapture %f) nounwind uwtable readonly ssp {
 
39
entry:
 
40
  %0 = bitcast float* %f to <4 x float>*
 
41
  %1 = load <4 x float>* %0, align 16
 
42
; CHECK: test5
 
43
; CHECK: vmovaps
 
44
; CHECK-NOT: vxorps
 
45
; CHECK-NOT: vinsertf128
 
46
  %shuffle.i = shufflevector <4 x float> %1, <4 x float> <float 0.000000e+00, float undef, float undef, float undef>, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 4, i32 4>
 
47
  ret <8 x float> %shuffle.i
 
48
}
 
49
 
 
50
define <4 x double> @test6(double* nocapture %d) nounwind uwtable readonly ssp {
 
51
entry:
 
52
  %0 = bitcast double* %d to <2 x double>*
 
53
  %1 = load <2 x double>* %0, align 16
 
54
; CHECK: test6
 
55
; CHECK: vmovaps
 
56
; CHECK-NOT: vxorps
 
57
; CHECK-NOT: vinsertf128
 
58
  %shuffle.i = shufflevector <2 x double> %1, <2 x double> <double 0.000000e+00, double undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 2>
 
59
  ret <4 x double> %shuffle.i
 
60
}
 
61
 
 
62
define <16 x i16> @test7(<4 x i16> %a) nounwind {
 
63
; CHECK: test7
 
64
  %b = shufflevector <4 x i16> %a, <4 x i16> undef, <16 x i32> <i32 1, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
 
65
; CHECK: ret
 
66
  ret <16 x i16> %b
 
67
}
 
68
 
 
69
; CHECK: test8
 
70
define void @test8() {
 
71
entry:
 
72
  %0 = load <16 x i64> addrspace(1)* null, align 128
 
73
  %1 = shufflevector <16 x i64> <i64 undef, i64 undef, i64 0, i64 undef, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 undef, i64 0, i64 undef, i64 undef, i64 undef, i64 undef>, <16 x i64> %0, <16 x i32> <i32 17, i32 18, i32 2, i32 undef, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 undef, i32 11, i32 undef, i32 undef, i32 undef, i32 26>
 
74
  %2 = shufflevector <16 x i64> %1, <16 x i64> %0, <16 x i32> <i32 0, i32 1, i32 2, i32 30, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 undef, i32 11, i32 undef, i32 22, i32 20, i32 15>
 
75
  store <16 x i64> %2, <16 x i64> addrspace(1)* undef, align 128
 
76
; CHECK: ret
 
77
  ret void
 
78
}
 
79
 
 
80
; Extract a value from a shufflevector..
 
81
define i32 @test9(<4 x i32> %a) nounwind {
 
82
; CHECK: test9
 
83
; CHECK: vpextrd
 
84
  %b = shufflevector <4 x i32> %a, <4 x i32> undef, <8 x i32> <i32 1, i32 1, i32 2, i32 2, i32 3, i32 3, i32 undef, i32 4> 
 
85
  %r = extractelement <8 x i32> %b, i32 2
 
86
; CHECK: ret
 
87
  ret i32 %r
 
88
}
 
89
 
 
90
; Extract a value which is the result of an undef mask.
 
91
define i32 @test10(<4 x i32> %a) nounwind {
 
92
; CHECK: @test10
 
93
; CHECK-NEXT: #
 
94
; CHECK-NEXT: ret
 
95
  %b = shufflevector <4 x i32> %a, <4 x i32> undef, <8 x i32> <i32 1, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
 
96
  %r = extractelement <8 x i32> %b, i32 2
 
97
  ret i32 %r
 
98
}
 
99
 
 
100
define <4 x float> @test11(<4 x float> %a) nounwind  {
 
101
; check: test11
 
102
; check: vpermilps $27
 
103
  %tmp1 = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
 
104
  ret <4 x float> %tmp1
 
105
}
 
106
 
 
107
define <4 x float> @test12(<4 x float>* %a) nounwind  {
 
108
; CHECK: test12
 
109
; CHECK: vpermilps $27, (
 
110
  %tmp0 = load <4 x float>* %a
 
111
  %tmp1 = shufflevector <4 x float> %tmp0, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
 
112
  ret <4 x float> %tmp1
 
113
}
 
114
 
 
115
define <4 x i32> @test13(<4 x i32> %a) nounwind  {
 
116
; check: test13
 
117
; check: vpshufd $27
 
118
  %tmp1 = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
 
119
  ret <4 x i32> %tmp1
 
120
}
 
121
 
 
122
define <4 x i32> @test14(<4 x i32>* %a) nounwind  {
 
123
; CHECK: test14
 
124
; CHECK: vpshufd $27, (
 
125
  %tmp0 = load <4 x i32>* %a
 
126
  %tmp1 = shufflevector <4 x i32> %tmp0, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
 
127
  ret <4 x i32> %tmp1
 
128
}
 
129
 
 
130
; CHECK: test15
 
131
; CHECK: vpshufd $8
 
132
; CHECK: ret
 
133
define <4 x i32> @test15(<2 x i32>%x) nounwind readnone {
 
134
  %x1 = shufflevector <2 x i32> %x, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
 
135
  ret <4 x i32>%x1
 
136
}
 
137
 
 
138
; rdar://10974078
 
139
define <8 x float> @test16(float* nocapture %f) nounwind uwtable readonly ssp {
 
140
entry:
 
141
  %0 = bitcast float* %f to <4 x float>*
 
142
  %1 = load <4 x float>* %0, align 8
 
143
; CHECK: test16
 
144
; CHECK: vmovups
 
145
; CHECK-NOT: vxorps
 
146
; CHECK-NOT: vinsertf128
 
147
  %shuffle.i = shufflevector <4 x float> %1, <4 x float> <float 0.000000e+00, float undef, float undef, float undef>, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 4, i32 4>
 
148
  ret <8 x float> %shuffle.i
 
149
}