Skip to content

Commit 8938a6c

Browse files
committed
[NFC] update test to make diff of the following commit clear
1 parent 043b608 commit 8938a6c

File tree

6 files changed

+763
-261
lines changed

6 files changed

+763
-261
lines changed

clang/test/CodeGen/align_value.cpp

Lines changed: 130 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,192 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
12
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s
23

34
typedef double * __attribute__((align_value(64))) aligned_double;
45

6+
// CHECK-LABEL: define {{[^@]+}}@_Z3fooPdS_Rd
7+
// CHECK-SAME: (double* align 64 [[X:%.*]], double* align 32 [[Y:%.*]], double* nonnull align 128 dereferenceable(8) [[Z:%.*]]) #0
8+
// CHECK-NEXT: entry:
9+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca double*, align 8
10+
// CHECK-NEXT: [[Y_ADDR:%.*]] = alloca double*, align 8
11+
// CHECK-NEXT: [[Z_ADDR:%.*]] = alloca double*, align 8
12+
// CHECK-NEXT: store double* [[X]], double** [[X_ADDR]], align 8
13+
// CHECK-NEXT: store double* [[Y]], double** [[Y_ADDR]], align 8
14+
// CHECK-NEXT: store double* [[Z]], double** [[Z_ADDR]], align 8
15+
// CHECK-NEXT: ret void
16+
//
517
void foo(aligned_double x, double * y __attribute__((align_value(32))),
618
double & z __attribute__((align_value(128)))) { };
7-
// CHECK: define void @_Z3fooPdS_Rd(double* align 64 %x, double* align 32 %y, double* nonnull align 128 dereferenceable(8) %z)
819

920
struct ad_struct {
1021
aligned_double a;
1122
};
1223

24+
// CHECK-LABEL: define {{[^@]+}}@_Z3fooR9ad_struct
25+
// CHECK-SAME: (%struct.ad_struct* nonnull align 8 dereferenceable(8) [[X:%.*]]) #0
26+
// CHECK-NEXT: entry:
27+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca %struct.ad_struct*, align 8
28+
// CHECK-NEXT: store %struct.ad_struct* [[X]], %struct.ad_struct** [[X_ADDR]], align 8
29+
// CHECK-NEXT: [[TMP0:%.*]] = load %struct.ad_struct*, %struct.ad_struct** [[X_ADDR]], align 8
30+
// CHECK-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_AD_STRUCT:%.*]], %struct.ad_struct* [[TMP0]], i32 0, i32 0
31+
// CHECK-NEXT: [[TMP1:%.*]] = load double*, double** [[A]], align 8
32+
// CHECK-NEXT: [[PTRINT:%.*]] = ptrtoint double* [[TMP1]] to i64
33+
// CHECK-NEXT: [[MASKEDPTR:%.*]] = and i64 [[PTRINT]], 63
34+
// CHECK-NEXT: [[MASKCOND:%.*]] = icmp eq i64 [[MASKEDPTR]], 0
35+
// CHECK-NEXT: call void @llvm.assume(i1 [[MASKCOND]])
36+
// CHECK-NEXT: ret double* [[TMP1]]
37+
//
1338
double *foo(ad_struct& x) {
14-
// CHECK-LABEL: @_Z3fooR9ad_struct
1539

16-
// CHECK: [[PTRINT1:%.+]] = ptrtoint
17-
// CHECK: [[MASKEDPTR1:%.+]] = and i64 [[PTRINT1]], 63
18-
// CHECK: [[MASKCOND1:%.+]] = icmp eq i64 [[MASKEDPTR1]], 0
19-
// CHECK: call void @llvm.assume(i1 [[MASKCOND1]])
2040
return x.a;
2141
}
2242

43+
// CHECK-LABEL: define {{[^@]+}}@_Z3gooP9ad_struct
44+
// CHECK-SAME: (%struct.ad_struct* [[X:%.*]]) #0
45+
// CHECK-NEXT: entry:
46+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca %struct.ad_struct*, align 8
47+
// CHECK-NEXT: store %struct.ad_struct* [[X]], %struct.ad_struct** [[X_ADDR]], align 8
48+
// CHECK-NEXT: [[TMP0:%.*]] = load %struct.ad_struct*, %struct.ad_struct** [[X_ADDR]], align 8
49+
// CHECK-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_AD_STRUCT:%.*]], %struct.ad_struct* [[TMP0]], i32 0, i32 0
50+
// CHECK-NEXT: [[TMP1:%.*]] = load double*, double** [[A]], align 8
51+
// CHECK-NEXT: [[PTRINT:%.*]] = ptrtoint double* [[TMP1]] to i64
52+
// CHECK-NEXT: [[MASKEDPTR:%.*]] = and i64 [[PTRINT]], 63
53+
// CHECK-NEXT: [[MASKCOND:%.*]] = icmp eq i64 [[MASKEDPTR]], 0
54+
// CHECK-NEXT: call void @llvm.assume(i1 [[MASKCOND]])
55+
// CHECK-NEXT: ret double* [[TMP1]]
56+
//
2357
double *goo(ad_struct *x) {
24-
// CHECK-LABEL: @_Z3gooP9ad_struct
2558

26-
// CHECK: [[PTRINT2:%.+]] = ptrtoint
27-
// CHECK: [[MASKEDPTR2:%.+]] = and i64 [[PTRINT2]], 63
28-
// CHECK: [[MASKCOND2:%.+]] = icmp eq i64 [[MASKEDPTR2]], 0
29-
// CHECK: call void @llvm.assume(i1 [[MASKCOND2]])
3059
return x->a;
3160
}
3261

62+
// CHECK-LABEL: define {{[^@]+}}@_Z3barPPd
63+
// CHECK-SAME: (double** [[X:%.*]]) #0
64+
// CHECK-NEXT: entry:
65+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca double**, align 8
66+
// CHECK-NEXT: store double** [[X]], double*** [[X_ADDR]], align 8
67+
// CHECK-NEXT: [[TMP0:%.*]] = load double**, double*** [[X_ADDR]], align 8
68+
// CHECK-NEXT: [[TMP1:%.*]] = load double*, double** [[TMP0]], align 8
69+
// CHECK-NEXT: [[PTRINT:%.*]] = ptrtoint double* [[TMP1]] to i64
70+
// CHECK-NEXT: [[MASKEDPTR:%.*]] = and i64 [[PTRINT]], 63
71+
// CHECK-NEXT: [[MASKCOND:%.*]] = icmp eq i64 [[MASKEDPTR]], 0
72+
// CHECK-NEXT: call void @llvm.assume(i1 [[MASKCOND]])
73+
// CHECK-NEXT: ret double* [[TMP1]]
74+
//
3375
double *bar(aligned_double *x) {
34-
// CHECK-LABEL: @_Z3barPPd
3576

36-
// CHECK: [[PTRINT3:%.+]] = ptrtoint
37-
// CHECK: [[MASKEDPTR3:%.+]] = and i64 [[PTRINT3]], 63
38-
// CHECK: [[MASKCOND3:%.+]] = icmp eq i64 [[MASKEDPTR3]], 0
39-
// CHECK: call void @llvm.assume(i1 [[MASKCOND3]])
4077
return *x;
4178
}
4279

80+
// CHECK-LABEL: define {{[^@]+}}@_Z3carRPd
81+
// CHECK-SAME: (double** nonnull align 8 dereferenceable(8) [[X:%.*]]) #0
82+
// CHECK-NEXT: entry:
83+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca double**, align 8
84+
// CHECK-NEXT: store double** [[X]], double*** [[X_ADDR]], align 8
85+
// CHECK-NEXT: [[TMP0:%.*]] = load double**, double*** [[X_ADDR]], align 8
86+
// CHECK-NEXT: [[TMP1:%.*]] = load double*, double** [[TMP0]], align 8
87+
// CHECK-NEXT: [[PTRINT:%.*]] = ptrtoint double* [[TMP1]] to i64
88+
// CHECK-NEXT: [[MASKEDPTR:%.*]] = and i64 [[PTRINT]], 63
89+
// CHECK-NEXT: [[MASKCOND:%.*]] = icmp eq i64 [[MASKEDPTR]], 0
90+
// CHECK-NEXT: call void @llvm.assume(i1 [[MASKCOND]])
91+
// CHECK-NEXT: ret double* [[TMP1]]
92+
//
4393
double *car(aligned_double &x) {
44-
// CHECK-LABEL: @_Z3carRPd
4594

46-
// CHECK: [[PTRINT4:%.+]] = ptrtoint
47-
// CHECK: [[MASKEDPTR4:%.+]] = and i64 [[PTRINT4]], 63
48-
// CHECK: [[MASKCOND4:%.+]] = icmp eq i64 [[MASKEDPTR4]], 0
49-
// CHECK: call void @llvm.assume(i1 [[MASKCOND4]])
5095
return x;
5196
}
5297

98+
// CHECK-LABEL: define {{[^@]+}}@_Z3darPPd
99+
// CHECK-SAME: (double** [[X:%.*]]) #0
100+
// CHECK-NEXT: entry:
101+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca double**, align 8
102+
// CHECK-NEXT: store double** [[X]], double*** [[X_ADDR]], align 8
103+
// CHECK-NEXT: [[TMP0:%.*]] = load double**, double*** [[X_ADDR]], align 8
104+
// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds double*, double** [[TMP0]], i64 5
105+
// CHECK-NEXT: [[TMP1:%.*]] = load double*, double** [[ARRAYIDX]], align 8
106+
// CHECK-NEXT: [[PTRINT:%.*]] = ptrtoint double* [[TMP1]] to i64
107+
// CHECK-NEXT: [[MASKEDPTR:%.*]] = and i64 [[PTRINT]], 63
108+
// CHECK-NEXT: [[MASKCOND:%.*]] = icmp eq i64 [[MASKEDPTR]], 0
109+
// CHECK-NEXT: call void @llvm.assume(i1 [[MASKCOND]])
110+
// CHECK-NEXT: ret double* [[TMP1]]
111+
//
53112
double *dar(aligned_double *x) {
54-
// CHECK-LABEL: @_Z3darPPd
55113

56-
// CHECK: [[PTRINT5:%.+]] = ptrtoint
57-
// CHECK: [[MASKEDPTR5:%.+]] = and i64 [[PTRINT5]], 63
58-
// CHECK: [[MASKCOND5:%.+]] = icmp eq i64 [[MASKEDPTR5]], 0
59-
// CHECK: call void @llvm.assume(i1 [[MASKCOND5]])
60114
return x[5];
61115
}
62116

63117
aligned_double eep();
118+
// CHECK-LABEL: define {{[^@]+}}@_Z3retv() #0
119+
// CHECK-NEXT: entry:
120+
// CHECK-NEXT: [[CALL:%.*]] = call double* @_Z3eepv()
121+
// CHECK-NEXT: [[PTRINT:%.*]] = ptrtoint double* [[CALL]] to i64
122+
// CHECK-NEXT: [[MASKEDPTR:%.*]] = and i64 [[PTRINT]], 63
123+
// CHECK-NEXT: [[MASKCOND:%.*]] = icmp eq i64 [[MASKEDPTR]], 0
124+
// CHECK-NEXT: call void @llvm.assume(i1 [[MASKCOND]])
125+
// CHECK-NEXT: ret double* [[CALL]]
126+
//
64127
double *ret() {
65-
// CHECK-LABEL: @_Z3retv
66128

67-
// CHECK: [[PTRINT6:%.+]] = ptrtoint
68-
// CHECK: [[MASKEDPTR6:%.+]] = and i64 [[PTRINT6]], 63
69-
// CHECK: [[MASKCOND6:%.+]] = icmp eq i64 [[MASKEDPTR6]], 0
70-
// CHECK: call void @llvm.assume(i1 [[MASKCOND6]])
71129
return eep();
72130
}
73131

132+
// CHECK-LABEL: define {{[^@]+}}@_Z3no1PPd
133+
// CHECK-SAME: (double** [[X:%.*]]) #0
134+
// CHECK-NEXT: entry:
135+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca double**, align 8
136+
// CHECK-NEXT: store double** [[X]], double*** [[X_ADDR]], align 8
137+
// CHECK-NEXT: [[TMP0:%.*]] = load double**, double*** [[X_ADDR]], align 8
138+
// CHECK-NEXT: ret double** [[TMP0]]
139+
//
74140
double **no1(aligned_double *x) {
75-
// CHECK-LABEL: @_Z3no1PPd
76141
return x;
77-
// CHECK-NOT: call void @llvm.assume
78142
}
79143

144+
// CHECK-LABEL: define {{[^@]+}}@_Z3no2RPd
145+
// CHECK-SAME: (double** nonnull align 8 dereferenceable(8) [[X:%.*]]) #0
146+
// CHECK-NEXT: entry:
147+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca double**, align 8
148+
// CHECK-NEXT: store double** [[X]], double*** [[X_ADDR]], align 8
149+
// CHECK-NEXT: [[TMP0:%.*]] = load double**, double*** [[X_ADDR]], align 8
150+
// CHECK-NEXT: ret double** [[TMP0]]
151+
//
80152
double *&no2(aligned_double &x) {
81-
// CHECK-LABEL: @_Z3no2RPd
82153
return x;
83-
// CHECK-NOT: call void @llvm.assume
84154
}
85155

156+
// CHECK-LABEL: define {{[^@]+}}@_Z3no3RPd
157+
// CHECK-SAME: (double** nonnull align 8 dereferenceable(8) [[X:%.*]]) #0
158+
// CHECK-NEXT: entry:
159+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca double**, align 8
160+
// CHECK-NEXT: store double** [[X]], double*** [[X_ADDR]], align 8
161+
// CHECK-NEXT: [[TMP0:%.*]] = load double**, double*** [[X_ADDR]], align 8
162+
// CHECK-NEXT: ret double** [[TMP0]]
163+
//
86164
double **no3(aligned_double &x) {
87-
// CHECK-LABEL: @_Z3no3RPd
88165
return &x;
89-
// CHECK-NOT: call void @llvm.assume
90166
}
91167

168+
// CHECK-LABEL: define {{[^@]+}}@_Z3no3Pd
169+
// CHECK-SAME: (double* align 64 [[X:%.*]]) #0
170+
// CHECK-NEXT: entry:
171+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca double*, align 8
172+
// CHECK-NEXT: store double* [[X]], double** [[X_ADDR]], align 8
173+
// CHECK-NEXT: [[TMP0:%.*]] = load double*, double** [[X_ADDR]], align 8
174+
// CHECK-NEXT: [[TMP1:%.*]] = load double, double* [[TMP0]], align 8
175+
// CHECK-NEXT: ret double [[TMP1]]
176+
//
92177
double no3(aligned_double x) {
93-
// CHECK-LABEL: @_Z3no3Pd
94178
return *x;
95-
// CHECK-NOT: call void @llvm.assume
96179
}
97180

181+
// CHECK-LABEL: define {{[^@]+}}@_Z3no4Pd
182+
// CHECK-SAME: (double* align 64 [[X:%.*]]) #0
183+
// CHECK-NEXT: entry:
184+
// CHECK-NEXT: [[X_ADDR:%.*]] = alloca double*, align 8
185+
// CHECK-NEXT: store double* [[X]], double** [[X_ADDR]], align 8
186+
// CHECK-NEXT: [[TMP0:%.*]] = load double*, double** [[X_ADDR]], align 8
187+
// CHECK-NEXT: ret double* [[TMP0]]
188+
//
98189
double *no4(aligned_double x) {
99-
// CHECK-LABEL: @_Z3no4Pd
100190
return x;
101-
// CHECK-NOT: call void @llvm.assume
102191
}
103192

0 commit comments

Comments
 (0)