Clang Project

clang_source_code/test/CodeGen/vector-alignment.c
1// RUN: %clang_cc1 -w -triple x86_64-apple-darwin10 \
2// RUN:  -emit-llvm -o - %s | FileCheck %s --check-prefix=ALL --check-prefix=SSE
3// RUN: %clang_cc1 -w -triple   i386-apple-darwin10 \
4// RUN:  -emit-llvm -o - %s | FileCheck %s --check-prefix=ALL --check-prefix=SSE
5// RUN: %clang_cc1 -w -triple x86_64-apple-darwin10 -target-feature +avx \
6// RUN:  -emit-llvm -o - %s | FileCheck %s --check-prefix=ALL --check-prefix=AVX
7// RUN: %clang_cc1 -w -triple   i386-apple-darwin10 -target-feature +avx \
8// RUN:  -emit-llvm -o - %s | FileCheck %s --check-prefix=ALL --check-prefix=AVX
9// RUN: %clang_cc1 -w -triple x86_64-apple-darwin10 -target-feature +avx512f \
10// RUN:  -emit-llvm -o - %s | FileCheck %s --check-prefix=ALL --check-prefix=AVX512
11// RUN: %clang_cc1 -w -triple   i386-apple-darwin10 -target-feature +avx512f \
12// RUN:  -emit-llvm -o - %s | FileCheck %s --check-prefix=ALL --check-prefix=AVX512
13// rdar://11759609
14
15// At or below target max alignment with no aligned attribute should align based
16// on the size of vector.
17double __attribute__((vector_size(16))) v1;
18// SSE: @v1 {{.*}}, align 16
19// AVX: @v1 {{.*}}, align 16
20// AVX512: @v1 {{.*}}, align 16
21double __attribute__((vector_size(32))) v2;
22// SSE: @v2 {{.*}}, align 16
23// AVX: @v2 {{.*}}, align 32
24// AVX512: @v2 {{.*}}, align 32
25
26// Alignment above target max alignment with no aligned attribute should align
27// based on the target max.
28double __attribute__((vector_size(64))) v3;
29// SSE: @v3 {{.*}}, align 16
30// AVX: @v3 {{.*}}, align 32
31// AVX512: @v3 {{.*}}, align 64
32double __attribute__((vector_size(1024))) v4;
33// SSE: @v4 {{.*}}, align 16
34// AVX: @v4 {{.*}}, align 32
35// AVX512: @v4 {{.*}}, align 64
36
37// Aliged attribute should always override.
38double __attribute__((vector_size(16), aligned(16))) v5;
39// ALL: @v5 {{.*}}, align 16
40double __attribute__((vector_size(16), aligned(64))) v6;
41// ALL: @v6 {{.*}}, align 64
42double __attribute__((vector_size(32), aligned(16))) v7;
43// ALL: @v7 {{.*}}, align 16
44double __attribute__((vector_size(32), aligned(64))) v8;
45// ALL: @v8 {{.*}}, align 64
46
47// Check non-power of 2 widths.
48double __attribute__((vector_size(24))) v9;
49// SSE: @v9 {{.*}}, align 16
50// AVX: @v9 {{.*}}, align 32
51// AVX512: @v9 {{.*}}, align 32
52double __attribute__((vector_size(40))) v10;
53// SSE: @v10 {{.*}}, align 16
54// AVX: @v10 {{.*}}, align 32
55// AVX512: @v10 {{.*}}, align 64
56
57// Check non-power of 2 widths with aligned attribute.
58double __attribute__((vector_size(24), aligned(64))) v11;
59// ALL: @v11 {{.*}}, align 64
60double __attribute__((vector_size(80), aligned(16))) v12;
61// ALL: @v12 {{.*}}, align 16
62