xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGen/vector-alignment.c (revision f4a2713ac843a11c696ec80c0a5e3e5d80b4d338)
1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -w -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
2*f4a2713aSLionel Sambuc // rdar://11759609
3*f4a2713aSLionel Sambuc 
4*f4a2713aSLionel Sambuc // At or below target max alignment with no aligned attribute should align based
5*f4a2713aSLionel Sambuc // on the size of vector.
6*f4a2713aSLionel Sambuc double __attribute__((vector_size(16))) v1;
7*f4a2713aSLionel Sambuc // CHECK: @v1 {{.*}}, align 16
8*f4a2713aSLionel Sambuc double __attribute__((vector_size(32))) v2;
9*f4a2713aSLionel Sambuc // CHECK: @v2 {{.*}}, align 32
10*f4a2713aSLionel Sambuc 
11*f4a2713aSLionel Sambuc // Alignment above target max alignment with no aligned attribute should align
12*f4a2713aSLionel Sambuc // based on the target max.
13*f4a2713aSLionel Sambuc double __attribute__((vector_size(64))) v3;
14*f4a2713aSLionel Sambuc // CHECK: @v3 {{.*}}, align 32
15*f4a2713aSLionel Sambuc double __attribute__((vector_size(1024))) v4;
16*f4a2713aSLionel Sambuc // CHECK: @v4 {{.*}}, align 32
17*f4a2713aSLionel Sambuc 
18*f4a2713aSLionel Sambuc // Aliged attribute should always override.
19*f4a2713aSLionel Sambuc double __attribute__((vector_size(16), aligned(16))) v5;
20*f4a2713aSLionel Sambuc // CHECK: @v5 {{.*}}, align 16
21*f4a2713aSLionel Sambuc double __attribute__((vector_size(16), aligned(64))) v6;
22*f4a2713aSLionel Sambuc // CHECK: @v6 {{.*}}, align 64
23*f4a2713aSLionel Sambuc double __attribute__((vector_size(32), aligned(16))) v7;
24*f4a2713aSLionel Sambuc // CHECK: @v7 {{.*}}, align 16
25*f4a2713aSLionel Sambuc double __attribute__((vector_size(32), aligned(64))) v8;
26*f4a2713aSLionel Sambuc // CHECK: @v8 {{.*}}, align 64
27*f4a2713aSLionel Sambuc 
28*f4a2713aSLionel Sambuc // Check non-power of 2 widths.
29*f4a2713aSLionel Sambuc double __attribute__((vector_size(24))) v9;
30*f4a2713aSLionel Sambuc // CHECK: @v9 {{.*}}, align 32
31*f4a2713aSLionel Sambuc double __attribute__((vector_size(40))) v10;
32*f4a2713aSLionel Sambuc // CHECK: @v10 {{.*}}, align 32
33*f4a2713aSLionel Sambuc 
34*f4a2713aSLionel Sambuc // Check non-power of 2 widths with aligned attribute.
35*f4a2713aSLionel Sambuc double __attribute__((vector_size(24), aligned(64))) v11;
36*f4a2713aSLionel Sambuc // CHECK: @v11 {{.*}}, align 64
37*f4a2713aSLionel Sambuc double __attribute__((vector_size(80), aligned(16))) v12;
38*f4a2713aSLionel Sambuc // CHECK: @v12 {{.*}}, align 16
39