1bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s 2bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay 3bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gaytypedef float float4 __attribute__((ext_vector_type(4))); 4bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay 5bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gaystruct __attribute__((packed, aligned(4))) struct1 { 6bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay float4 position; 7bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay}; 8bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gayint x = __alignof(struct struct1); 9bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay 10bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gayfloat4 f(struct struct1* x) { return x->position; } 11bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay 12bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gayvoid func(struct struct1* p, float *a, float *b, float c) { 13bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay p->position.x = c; 14bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay *a = p->position.y; 15bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay *b = p->position[0]; 16bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay p->position[2] = c; 17bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // FIXME: We should be able to come up with a more aggressive alignment 18bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // estimate. 19bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // CHECK: @func 20bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // CHECK: load <4 x float>* {{%.*}}, align 1 21bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // CHECK: store <4 x float> {{%.*}}, <4 x float>* {{%.*}}, align 1 22bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // CHECK: load <4 x float>* {{%.*}}, align 1 23bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // CHECK: load <4 x float>* {{%.*}}, align 1 24bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // CHECK: load <4 x float>* {{%.*}}, align 1 25bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // CHECK: store <4 x float> {{%.*}}, <4 x float>* {{%.*}}, align 1 26bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay // CHECK: ret void 27bce35a221752a1ca6d2a70e8592b47b7cc1ec90dMatt Beaumont-Gay} 28