blob: ae877edb815d42106067f23674cfc61326dfc4b8 [file] [log] [blame]
Daniel Dunbar2d6ca8d2008-08-21 02:51:29 +00001// RUN: clang -emit-llvm %s -o %t
Chris Lattner90997ac2007-08-03 16:42:43 +00002
Nate Begeman213541a2008-04-18 23:10:10 +00003typedef __attribute__(( ext_vector_type(4) )) float float4;
4typedef __attribute__(( ext_vector_type(2) )) float float2;
Daniel Dunbar523aa602009-01-05 22:55:36 +00005typedef __attribute__(( ext_vector_type(4) )) int int4;
Chris Lattner90997ac2007-08-03 16:42:43 +00006
Nate Begemand47d4f52008-01-25 05:34:48 +00007float4 foo = (float4){ 1.0, 2.0, 3.0, 4.0 };
Chris Lattner90997ac2007-08-03 16:42:43 +00008
9float4 test1(float4 V) {
10 return V.wzyx+V;
11}
12
13float2 vec2, vec2_2;
14float4 vec4, vec4_2;
15float f;
16
Daniel Dunbar523aa602009-01-05 22:55:36 +000017void test2() {
Nate Begeman190d6a22009-01-18 02:01:21 +000018 vec2 = vec4.xy; // shorten
Chris Lattner90997ac2007-08-03 16:42:43 +000019 f = vec2.x; // extract elt
20 vec4 = vec4.yyyy; // splat
21
22 vec2.x = f; // insert one.
23 vec2.yx = vec2; // reverse
24}
25
Daniel Dunbar523aa602009-01-05 22:55:36 +000026void test3(float4 *out) {
Devang Patela83cc332007-10-24 18:05:48 +000027 *out = ((float4) {1.0f, 2.0f, 3.0f, 4.0f });
28}
29
Daniel Dunbar523aa602009-01-05 22:55:36 +000030void test4(float4 *out) {
Devang Patela83cc332007-10-24 18:05:48 +000031 float a = 1.0f;
32 float b = 2.0f;
33 float c = 3.0f;
34 float d = 4.0f;
35 *out = ((float4) {a,b,c,d});
36}
Nate Begeman4119d1a2007-12-30 02:59:45 +000037
Daniel Dunbar523aa602009-01-05 22:55:36 +000038void test5(float4 *out) {
Nate Begeman4119d1a2007-12-30 02:59:45 +000039 float a;
40 float4 b;
41
42 a = 1.0f;
43 b = a;
44 b = b * 5.0f;
45 b = 5.0f * b;
46 b *= a;
47
48 *out = b;
49}
Daniel Dunbar523aa602009-01-05 22:55:36 +000050
51void test6(float4 *ap, float4 *bp, float c) {
52 float4 a = *ap;
53 float4 b = *bp;
54
55 a = a + b;
56 a = a - b;
57 a = a * b;
58 a = a / b;
59
60 a = a + c;
61 a = a - c;
62 a = a * c;
63 a = a / c;
64
65 a += b;
66 a -= b;
67 a *= b;
68 a /= b;
69
70 a += c;
71 a -= c;
72 a *= c;
73 a /= c;
74
75 int4 cmp;
76
77 cmp = a < b;
78 cmp = a <= b;
79 cmp = a < b;
80 cmp = a >= b;
81 cmp = a == b;
82 cmp = a != b;
83}
84
85void test7(int4 *ap, int4 *bp, int c) {
86 int4 a = *ap;
87 int4 b = *bp;
88
89 a = a + b;
90 a = a - b;
91 a = a * b;
92 a = a / b;
93 a = a % b;
94
95 a = a + c;
96 a = a - c;
97 a = a * c;
98 a = a / c;
99 a = a % c;
100
101 a += b;
102 a -= b;
103 a *= b;
104 a /= b;
105 a %= b;
106
107 a += c;
108 a -= c;
109 a *= c;
110 a /= c;
111 a %= c;
112
113 int4 cmp;
114
115 cmp = a < b;
116 cmp = a <= b;
117 cmp = a < b;
118 cmp = a >= b;
119 cmp = a == b;
120 cmp = a != b;
121}