xref: /llvm-project/clang/test/utils/update_cc_test_checks/Inputs/basic-cplusplus.cpp.expected (revision 94c0db06ab8cf0897ff32884ea6f683f5fc5a7b9)
1*94c0db06SAlexander Richardson// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --include-generated-funcs --version 5
23ce0e92fSAlex Richardson// Basic C++ test for update_cc_test_checks
357c81917SNikita Popov// RUN: %clang_cc1 -triple=x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s
4*94c0db06SAlexander Richardson// RUN: %clang_cc1 -triple=x86_64-apple-macho -emit-llvm -o - %s | FileCheck %s --check-prefix=MACHO
5*94c0db06SAlexander Richardson// RUN: %clang_cc1 -triple=x86_64-windows-msvc -emit-llvm -o - %s | FileCheck %s --check-prefix=MSVC
6*94c0db06SAlexander Richardson// RUN: %clang_cc1 -triple=x86_64-windows-gnu -emit-llvm -o - %s | FileCheck %s --check-prefix=MINGW
73ce0e92fSAlex Richardson
83ce0e92fSAlex Richardsonclass Foo {
93ce0e92fSAlex Richardson  int x;
103ce0e92fSAlex Richardson
113ce0e92fSAlex Richardsonpublic:
123ce0e92fSAlex Richardson  explicit Foo(int x);
133ce0e92fSAlex Richardson  ~Foo();
14*94c0db06SAlexander Richardson  inline int function_defined_inline(int arg) const {
15*94c0db06SAlexander Richardson    return arg + x;
16*94c0db06SAlexander Richardson  }
17*94c0db06SAlexander Richardson  inline int function_defined_out_of_line(int arg) const;
18*94c0db06SAlexander Richardson};
19*94c0db06SAlexander Richardson
20*94c0db06SAlexander Richardson[[clang::noinline]] static int static_noinline_fn(int arg) { return arg; }
21*94c0db06SAlexander Richardson
22*94c0db06SAlexander RichardsonFoo::Foo(int x) : x(x) {}
23*94c0db06SAlexander RichardsonFoo::~Foo() {}
24*94c0db06SAlexander Richardsonint Foo::function_defined_out_of_line(int arg) const { return x - arg; }
25*94c0db06SAlexander Richardson
26*94c0db06SAlexander Richardson// Call the inline methods to ensure the LLVM IR is generated:
27*94c0db06SAlexander Richardsonint main() {
28*94c0db06SAlexander Richardson  Foo f(1);
29*94c0db06SAlexander Richardson  f.function_defined_inline(2);
30*94c0db06SAlexander Richardson  f.function_defined_out_of_line(3);
31*94c0db06SAlexander Richardson  return static_noinline_fn(0);
32*94c0db06SAlexander Richardson}
33*94c0db06SAlexander Richardson// CHECK-LABEL: define dso_local void @_ZN3FooC2Ei(
34*94c0db06SAlexander Richardson// CHECK-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[X:%.*]]) unnamed_addr #[[ATTR0:[0-9]+]] align 2 {
35*94c0db06SAlexander Richardson// CHECK-NEXT:  [[ENTRY:.*:]]
36*94c0db06SAlexander Richardson// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
37*94c0db06SAlexander Richardson// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca i32, align 4
38*94c0db06SAlexander Richardson// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
39*94c0db06SAlexander Richardson// CHECK-NEXT:    store i32 [[X]], ptr [[X_ADDR]], align 4
40*94c0db06SAlexander Richardson// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
41*94c0db06SAlexander Richardson// CHECK-NEXT:    [[X2:%.*]] = getelementptr inbounds nuw [[CLASS_FOO:%.*]], ptr [[THIS1]], i32 0, i32 0
42*94c0db06SAlexander Richardson// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
43*94c0db06SAlexander Richardson// CHECK-NEXT:    store i32 [[TMP0]], ptr [[X2]], align 4
44*94c0db06SAlexander Richardson// CHECK-NEXT:    ret void
45*94c0db06SAlexander Richardson//
46*94c0db06SAlexander Richardson//
47*94c0db06SAlexander Richardson// CHECK-LABEL: define dso_local void @_ZN3FooC1Ei(
48*94c0db06SAlexander Richardson// CHECK-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[X:%.*]]) unnamed_addr #[[ATTR0]] align 2 {
49*94c0db06SAlexander Richardson// CHECK-NEXT:  [[ENTRY:.*:]]
50*94c0db06SAlexander Richardson// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
51*94c0db06SAlexander Richardson// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca i32, align 4
52*94c0db06SAlexander Richardson// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
53*94c0db06SAlexander Richardson// CHECK-NEXT:    store i32 [[X]], ptr [[X_ADDR]], align 4
54*94c0db06SAlexander Richardson// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
55*94c0db06SAlexander Richardson// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
56*94c0db06SAlexander Richardson// CHECK-NEXT:    call void @_ZN3FooC2Ei(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], i32 noundef [[TMP0]])
57*94c0db06SAlexander Richardson// CHECK-NEXT:    ret void
58*94c0db06SAlexander Richardson//
59*94c0db06SAlexander Richardson//
60*94c0db06SAlexander Richardson// CHECK-LABEL: define dso_local void @_ZN3FooD2Ev(
61*94c0db06SAlexander Richardson// CHECK-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] align 2 {
62*94c0db06SAlexander Richardson// CHECK-NEXT:  [[ENTRY:.*:]]
63*94c0db06SAlexander Richardson// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
64*94c0db06SAlexander Richardson// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
65*94c0db06SAlexander Richardson// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
66*94c0db06SAlexander Richardson// CHECK-NEXT:    ret void
67*94c0db06SAlexander Richardson//
68*94c0db06SAlexander Richardson//
69*94c0db06SAlexander Richardson// CHECK-LABEL: define dso_local void @_ZN3FooD1Ev(
70*94c0db06SAlexander Richardson// CHECK-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] align 2 {
71*94c0db06SAlexander Richardson// CHECK-NEXT:  [[ENTRY:.*:]]
72*94c0db06SAlexander Richardson// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
73*94c0db06SAlexander Richardson// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
74*94c0db06SAlexander Richardson// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
75*94c0db06SAlexander Richardson// CHECK-NEXT:    call void @_ZN3FooD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR2:[0-9]+]]
76*94c0db06SAlexander Richardson// CHECK-NEXT:    ret void
77*94c0db06SAlexander Richardson//
78*94c0db06SAlexander Richardson//
79*94c0db06SAlexander Richardson// CHECK-LABEL: define dso_local noundef i32 @main(
80*94c0db06SAlexander Richardson// CHECK-SAME: ) #[[ATTR1:[0-9]+]] {
81*94c0db06SAlexander Richardson// CHECK-NEXT:  [[ENTRY:.*:]]
82*94c0db06SAlexander Richardson// CHECK-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4
83*94c0db06SAlexander Richardson// CHECK-NEXT:    [[F:%.*]] = alloca [[CLASS_FOO:%.*]], align 4
84*94c0db06SAlexander Richardson// CHECK-NEXT:    store i32 0, ptr [[RETVAL]], align 4
85*94c0db06SAlexander Richardson// CHECK-NEXT:    call void @_ZN3FooC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 1)
86*94c0db06SAlexander Richardson// CHECK-NEXT:    [[CALL:%.*]] = call noundef i32 @_ZNK3Foo23function_defined_inlineEi(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 2)
87*94c0db06SAlexander Richardson// CHECK-NEXT:    [[CALL1:%.*]] = call noundef i32 @_ZNK3Foo28function_defined_out_of_lineEi(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 3)
88*94c0db06SAlexander Richardson// CHECK-NEXT:    [[CALL2:%.*]] = call noundef i32 @_ZL18static_noinline_fni(i32 noundef 0)
89*94c0db06SAlexander Richardson// CHECK-NEXT:    store i32 [[CALL2]], ptr [[RETVAL]], align 4
90*94c0db06SAlexander Richardson// CHECK-NEXT:    call void @_ZN3FooD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[F]]) #[[ATTR2]]
91*94c0db06SAlexander Richardson// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[RETVAL]], align 4
92*94c0db06SAlexander Richardson// CHECK-NEXT:    ret i32 [[TMP0]]
93*94c0db06SAlexander Richardson//
94*94c0db06SAlexander Richardson//
95*94c0db06SAlexander Richardson// CHECK-LABEL: define linkonce_odr noundef i32 @_ZNK3Foo23function_defined_inlineEi(
96*94c0db06SAlexander Richardson// CHECK-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
97*94c0db06SAlexander Richardson// CHECK-NEXT:  [[ENTRY:.*:]]
9857c81917SNikita Popov// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
993ce0e92fSAlex Richardson// CHECK-NEXT:    [[ARG_ADDR:%.*]] = alloca i32, align 4
100*94c0db06SAlexander Richardson// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
101*94c0db06SAlexander Richardson// CHECK-NEXT:    store i32 [[ARG]], ptr [[ARG_ADDR]], align 4
10257c81917SNikita Popov// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
10357c81917SNikita Popov// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARG_ADDR]], align 4
10494473f4dSHari Limaye// CHECK-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[CLASS_FOO:%.*]], ptr [[THIS1]], i32 0, i32 0
10557c81917SNikita Popov// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[X]], align 4
1063ce0e92fSAlex Richardson// CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
1073ce0e92fSAlex Richardson// CHECK-NEXT:    ret i32 [[ADD]]
1083ce0e92fSAlex Richardson//
1093ce0e92fSAlex Richardson//
110*94c0db06SAlexander Richardson// CHECK-LABEL: define linkonce_odr noundef i32 @_ZNK3Foo28function_defined_out_of_lineEi(
111*94c0db06SAlexander Richardson// CHECK-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
112*94c0db06SAlexander Richardson// CHECK-NEXT:  [[ENTRY:.*:]]
11357c81917SNikita Popov// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
1143ce0e92fSAlex Richardson// CHECK-NEXT:    [[ARG_ADDR:%.*]] = alloca i32, align 4
115*94c0db06SAlexander Richardson// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
116*94c0db06SAlexander Richardson// CHECK-NEXT:    store i32 [[ARG]], ptr [[ARG_ADDR]], align 4
11757c81917SNikita Popov// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
11894473f4dSHari Limaye// CHECK-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[CLASS_FOO:%.*]], ptr [[THIS1]], i32 0, i32 0
11957c81917SNikita Popov// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[X]], align 4
12057c81917SNikita Popov// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[ARG_ADDR]], align 4
1213ce0e92fSAlex Richardson// CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP0]], [[TMP1]]
1223ce0e92fSAlex Richardson// CHECK-NEXT:    ret i32 [[SUB]]
1233ce0e92fSAlex Richardson//
1243ce0e92fSAlex Richardson//
125*94c0db06SAlexander Richardson// CHECK-LABEL: define internal noundef i32 @_ZL18static_noinline_fni(
126*94c0db06SAlexander Richardson// CHECK-SAME: i32 noundef [[ARG:%.*]]) #[[ATTR0]] {
127*94c0db06SAlexander Richardson// CHECK-NEXT:  [[ENTRY:.*:]]
128*94c0db06SAlexander Richardson// CHECK-NEXT:    [[ARG_ADDR:%.*]] = alloca i32, align 4
129*94c0db06SAlexander Richardson// CHECK-NEXT:    store i32 [[ARG]], ptr [[ARG_ADDR]], align 4
130*94c0db06SAlexander Richardson// CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARG_ADDR]], align 4
131*94c0db06SAlexander Richardson// CHECK-NEXT:    ret i32 [[TMP0]]
132*94c0db06SAlexander Richardson//
133*94c0db06SAlexander Richardson//
134*94c0db06SAlexander Richardson// MACHO-LABEL: define void @_ZN3FooC2Ei(
135*94c0db06SAlexander Richardson// MACHO-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[X:%.*]]) unnamed_addr #[[ATTR0:[0-9]+]] align 2 {
136*94c0db06SAlexander Richardson// MACHO-NEXT:  [[ENTRY:.*:]]
137*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
138*94c0db06SAlexander Richardson// MACHO-NEXT:    [[X_ADDR:%.*]] = alloca i32, align 4
139*94c0db06SAlexander Richardson// MACHO-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
140*94c0db06SAlexander Richardson// MACHO-NEXT:    store i32 [[X]], ptr [[X_ADDR]], align 4
141*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
142*94c0db06SAlexander Richardson// MACHO-NEXT:    [[X2:%.*]] = getelementptr inbounds nuw [[CLASS_FOO:%.*]], ptr [[THIS1]], i32 0, i32 0
143*94c0db06SAlexander Richardson// MACHO-NEXT:    [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
144*94c0db06SAlexander Richardson// MACHO-NEXT:    store i32 [[TMP0]], ptr [[X2]], align 4
145*94c0db06SAlexander Richardson// MACHO-NEXT:    ret void
146*94c0db06SAlexander Richardson//
147*94c0db06SAlexander Richardson//
148*94c0db06SAlexander Richardson// MACHO-LABEL: define void @_ZN3FooC1Ei(
149*94c0db06SAlexander Richardson// MACHO-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[X:%.*]]) unnamed_addr #[[ATTR0]] align 2 {
150*94c0db06SAlexander Richardson// MACHO-NEXT:  [[ENTRY:.*:]]
151*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
152*94c0db06SAlexander Richardson// MACHO-NEXT:    [[X_ADDR:%.*]] = alloca i32, align 4
153*94c0db06SAlexander Richardson// MACHO-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
154*94c0db06SAlexander Richardson// MACHO-NEXT:    store i32 [[X]], ptr [[X_ADDR]], align 4
155*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
156*94c0db06SAlexander Richardson// MACHO-NEXT:    [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
157*94c0db06SAlexander Richardson// MACHO-NEXT:    call void @_ZN3FooC2Ei(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], i32 noundef [[TMP0]])
158*94c0db06SAlexander Richardson// MACHO-NEXT:    ret void
159*94c0db06SAlexander Richardson//
160*94c0db06SAlexander Richardson//
161*94c0db06SAlexander Richardson// MACHO-LABEL: define void @_ZN3FooD2Ev(
162*94c0db06SAlexander Richardson// MACHO-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] align 2 {
163*94c0db06SAlexander Richardson// MACHO-NEXT:  [[ENTRY:.*:]]
164*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
165*94c0db06SAlexander Richardson// MACHO-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
166*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
167*94c0db06SAlexander Richardson// MACHO-NEXT:    ret void
168*94c0db06SAlexander Richardson//
169*94c0db06SAlexander Richardson//
170*94c0db06SAlexander Richardson// MACHO-LABEL: define void @_ZN3FooD1Ev(
171*94c0db06SAlexander Richardson// MACHO-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] align 2 {
172*94c0db06SAlexander Richardson// MACHO-NEXT:  [[ENTRY:.*:]]
173*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
174*94c0db06SAlexander Richardson// MACHO-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
175*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
176*94c0db06SAlexander Richardson// MACHO-NEXT:    call void @_ZN3FooD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR2:[0-9]+]]
177*94c0db06SAlexander Richardson// MACHO-NEXT:    ret void
178*94c0db06SAlexander Richardson//
179*94c0db06SAlexander Richardson//
180*94c0db06SAlexander Richardson// MACHO-LABEL: define noundef i32 @main(
181*94c0db06SAlexander Richardson// MACHO-SAME: ) #[[ATTR1:[0-9]+]] {
182*94c0db06SAlexander Richardson// MACHO-NEXT:  [[ENTRY:.*:]]
183*94c0db06SAlexander Richardson// MACHO-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4
184*94c0db06SAlexander Richardson// MACHO-NEXT:    [[F:%.*]] = alloca [[CLASS_FOO:%.*]], align 4
185*94c0db06SAlexander Richardson// MACHO-NEXT:    store i32 0, ptr [[RETVAL]], align 4
186*94c0db06SAlexander Richardson// MACHO-NEXT:    call void @_ZN3FooC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 1)
187*94c0db06SAlexander Richardson// MACHO-NEXT:    [[CALL:%.*]] = call noundef i32 @_ZNK3Foo23function_defined_inlineEi(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 2)
188*94c0db06SAlexander Richardson// MACHO-NEXT:    [[CALL1:%.*]] = call noundef i32 @_ZNK3Foo28function_defined_out_of_lineEi(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 3)
189*94c0db06SAlexander Richardson// MACHO-NEXT:    [[CALL2:%.*]] = call noundef i32 @_ZL18static_noinline_fni(i32 noundef 0)
190*94c0db06SAlexander Richardson// MACHO-NEXT:    store i32 [[CALL2]], ptr [[RETVAL]], align 4
191*94c0db06SAlexander Richardson// MACHO-NEXT:    call void @_ZN3FooD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[F]]) #[[ATTR2]]
192*94c0db06SAlexander Richardson// MACHO-NEXT:    [[TMP0:%.*]] = load i32, ptr [[RETVAL]], align 4
193*94c0db06SAlexander Richardson// MACHO-NEXT:    ret i32 [[TMP0]]
194*94c0db06SAlexander Richardson//
195*94c0db06SAlexander Richardson//
196*94c0db06SAlexander Richardson// MACHO-LABEL: define linkonce_odr noundef i32 @_ZNK3Foo23function_defined_inlineEi(
197*94c0db06SAlexander Richardson// MACHO-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[ARG:%.*]]) #[[ATTR0]] align 2 {
198*94c0db06SAlexander Richardson// MACHO-NEXT:  [[ENTRY:.*:]]
199*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
200*94c0db06SAlexander Richardson// MACHO-NEXT:    [[ARG_ADDR:%.*]] = alloca i32, align 4
201*94c0db06SAlexander Richardson// MACHO-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
202*94c0db06SAlexander Richardson// MACHO-NEXT:    store i32 [[ARG]], ptr [[ARG_ADDR]], align 4
203*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
204*94c0db06SAlexander Richardson// MACHO-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARG_ADDR]], align 4
205*94c0db06SAlexander Richardson// MACHO-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[CLASS_FOO:%.*]], ptr [[THIS1]], i32 0, i32 0
206*94c0db06SAlexander Richardson// MACHO-NEXT:    [[TMP1:%.*]] = load i32, ptr [[X]], align 4
207*94c0db06SAlexander Richardson// MACHO-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
208*94c0db06SAlexander Richardson// MACHO-NEXT:    ret i32 [[ADD]]
209*94c0db06SAlexander Richardson//
210*94c0db06SAlexander Richardson//
211*94c0db06SAlexander Richardson// MACHO-LABEL: define linkonce_odr noundef i32 @_ZNK3Foo28function_defined_out_of_lineEi(
212*94c0db06SAlexander Richardson// MACHO-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[ARG:%.*]]) #[[ATTR0]] align 2 {
213*94c0db06SAlexander Richardson// MACHO-NEXT:  [[ENTRY:.*:]]
214*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
215*94c0db06SAlexander Richardson// MACHO-NEXT:    [[ARG_ADDR:%.*]] = alloca i32, align 4
216*94c0db06SAlexander Richardson// MACHO-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
217*94c0db06SAlexander Richardson// MACHO-NEXT:    store i32 [[ARG]], ptr [[ARG_ADDR]], align 4
218*94c0db06SAlexander Richardson// MACHO-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
219*94c0db06SAlexander Richardson// MACHO-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[CLASS_FOO:%.*]], ptr [[THIS1]], i32 0, i32 0
220*94c0db06SAlexander Richardson// MACHO-NEXT:    [[TMP0:%.*]] = load i32, ptr [[X]], align 4
221*94c0db06SAlexander Richardson// MACHO-NEXT:    [[TMP1:%.*]] = load i32, ptr [[ARG_ADDR]], align 4
222*94c0db06SAlexander Richardson// MACHO-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP0]], [[TMP1]]
223*94c0db06SAlexander Richardson// MACHO-NEXT:    ret i32 [[SUB]]
224*94c0db06SAlexander Richardson//
225*94c0db06SAlexander Richardson//
226*94c0db06SAlexander Richardson// MACHO-LABEL: define internal noundef i32 @_ZL18static_noinline_fni(
227*94c0db06SAlexander Richardson// MACHO-SAME: i32 noundef [[ARG:%.*]]) #[[ATTR0]] {
228*94c0db06SAlexander Richardson// MACHO-NEXT:  [[ENTRY:.*:]]
229*94c0db06SAlexander Richardson// MACHO-NEXT:    [[ARG_ADDR:%.*]] = alloca i32, align 4
230*94c0db06SAlexander Richardson// MACHO-NEXT:    store i32 [[ARG]], ptr [[ARG_ADDR]], align 4
231*94c0db06SAlexander Richardson// MACHO-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARG_ADDR]], align 4
232*94c0db06SAlexander Richardson// MACHO-NEXT:    ret i32 [[TMP0]]
233*94c0db06SAlexander Richardson//
234*94c0db06SAlexander Richardson//
235*94c0db06SAlexander Richardson// MSVC-LABEL: define dso_local noundef i32 @main(
236*94c0db06SAlexander Richardson// MSVC-SAME: ) #[[ATTR1:[0-9]+]] {
237*94c0db06SAlexander Richardson// MSVC-NEXT:  [[ENTRY:.*:]]
238*94c0db06SAlexander Richardson// MSVC-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4
239*94c0db06SAlexander Richardson// MSVC-NEXT:    [[F:%.*]] = alloca [[CLASS_FOO:%.*]], align 4
240*94c0db06SAlexander Richardson// MSVC-NEXT:    store i32 0, ptr [[RETVAL]], align 4
241*94c0db06SAlexander Richardson// MSVC-NEXT:    [[CALL:%.*]] = call noundef ptr @"??0Foo@@QEAA@H@Z"(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 1)
242*94c0db06SAlexander Richardson// MSVC-NEXT:    [[CALL1:%.*]] = call noundef i32 @"?function_defined_inline@Foo@@QEBAHH@Z"(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 2)
243*94c0db06SAlexander Richardson// MSVC-NEXT:    [[CALL2:%.*]] = call noundef i32 @"?function_defined_out_of_line@Foo@@QEBAHH@Z"(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 3)
244*94c0db06SAlexander Richardson// MSVC-NEXT:    [[CALL3:%.*]] = call noundef i32 @"?static_noinline_fn@@YAHH@Z"(i32 noundef 0)
245*94c0db06SAlexander Richardson// MSVC-NEXT:    store i32 [[CALL3]], ptr [[RETVAL]], align 4
246*94c0db06SAlexander Richardson// MSVC-NEXT:    call void @"??1Foo@@QEAA@XZ"(ptr noundef nonnull align 4 dereferenceable(4) [[F]]) #[[ATTR2:[0-9]+]]
247*94c0db06SAlexander Richardson// MSVC-NEXT:    [[TMP0:%.*]] = load i32, ptr [[RETVAL]], align 4
248*94c0db06SAlexander Richardson// MSVC-NEXT:    ret i32 [[TMP0]]
249*94c0db06SAlexander Richardson//
250*94c0db06SAlexander Richardson//
251*94c0db06SAlexander Richardson// MINGW-LABEL: define dso_local void @_ZN3FooC2Ei(
252*94c0db06SAlexander Richardson// MINGW-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[X:%.*]]) unnamed_addr #[[ATTR0:[0-9]+]] align 2 {
253*94c0db06SAlexander Richardson// MINGW-NEXT:  [[ENTRY:.*:]]
254*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
255*94c0db06SAlexander Richardson// MINGW-NEXT:    [[X_ADDR:%.*]] = alloca i32, align 4
256*94c0db06SAlexander Richardson// MINGW-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
257*94c0db06SAlexander Richardson// MINGW-NEXT:    store i32 [[X]], ptr [[X_ADDR]], align 4
258*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
259*94c0db06SAlexander Richardson// MINGW-NEXT:    [[X2:%.*]] = getelementptr inbounds nuw [[CLASS_FOO:%.*]], ptr [[THIS1]], i32 0, i32 0
260*94c0db06SAlexander Richardson// MINGW-NEXT:    [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
261*94c0db06SAlexander Richardson// MINGW-NEXT:    store i32 [[TMP0]], ptr [[X2]], align 4
262*94c0db06SAlexander Richardson// MINGW-NEXT:    ret void
263*94c0db06SAlexander Richardson//
264*94c0db06SAlexander Richardson//
265*94c0db06SAlexander Richardson// MINGW-LABEL: define dso_local void @_ZN3FooC1Ei(
266*94c0db06SAlexander Richardson// MINGW-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[X:%.*]]) unnamed_addr #[[ATTR0]] align 2 {
267*94c0db06SAlexander Richardson// MINGW-NEXT:  [[ENTRY:.*:]]
268*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
269*94c0db06SAlexander Richardson// MINGW-NEXT:    [[X_ADDR:%.*]] = alloca i32, align 4
270*94c0db06SAlexander Richardson// MINGW-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
271*94c0db06SAlexander Richardson// MINGW-NEXT:    store i32 [[X]], ptr [[X_ADDR]], align 4
272*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
273*94c0db06SAlexander Richardson// MINGW-NEXT:    [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
274*94c0db06SAlexander Richardson// MINGW-NEXT:    call void @_ZN3FooC2Ei(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], i32 noundef [[TMP0]])
275*94c0db06SAlexander Richardson// MINGW-NEXT:    ret void
276*94c0db06SAlexander Richardson//
277*94c0db06SAlexander Richardson//
278*94c0db06SAlexander Richardson// MINGW-LABEL: define dso_local void @_ZN3FooD2Ev(
279*94c0db06SAlexander Richardson// MINGW-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] align 2 {
280*94c0db06SAlexander Richardson// MINGW-NEXT:  [[ENTRY:.*:]]
281*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
282*94c0db06SAlexander Richardson// MINGW-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
283*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
284*94c0db06SAlexander Richardson// MINGW-NEXT:    ret void
285*94c0db06SAlexander Richardson//
286*94c0db06SAlexander Richardson//
287*94c0db06SAlexander Richardson// MINGW-LABEL: define dso_local void @_ZN3FooD1Ev(
288*94c0db06SAlexander Richardson// MINGW-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] align 2 {
289*94c0db06SAlexander Richardson// MINGW-NEXT:  [[ENTRY:.*:]]
290*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
291*94c0db06SAlexander Richardson// MINGW-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
292*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
293*94c0db06SAlexander Richardson// MINGW-NEXT:    call void @_ZN3FooD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR2:[0-9]+]]
294*94c0db06SAlexander Richardson// MINGW-NEXT:    ret void
295*94c0db06SAlexander Richardson//
296*94c0db06SAlexander Richardson//
297*94c0db06SAlexander Richardson// MINGW-LABEL: define dso_local noundef i32 @main(
298*94c0db06SAlexander Richardson// MINGW-SAME: ) #[[ATTR1:[0-9]+]] {
299*94c0db06SAlexander Richardson// MINGW-NEXT:  [[ENTRY:.*:]]
300*94c0db06SAlexander Richardson// MINGW-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4
301*94c0db06SAlexander Richardson// MINGW-NEXT:    [[F:%.*]] = alloca [[CLASS_FOO:%.*]], align 4
302*94c0db06SAlexander Richardson// MINGW-NEXT:    store i32 0, ptr [[RETVAL]], align 4
303*94c0db06SAlexander Richardson// MINGW-NEXT:    call void @_ZN3FooC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 1)
304*94c0db06SAlexander Richardson// MINGW-NEXT:    [[CALL:%.*]] = call noundef i32 @_ZNK3Foo23function_defined_inlineEi(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 2)
305*94c0db06SAlexander Richardson// MINGW-NEXT:    [[CALL1:%.*]] = call noundef i32 @_ZNK3Foo28function_defined_out_of_lineEi(ptr noundef nonnull align 4 dereferenceable(4) [[F]], i32 noundef 3)
306*94c0db06SAlexander Richardson// MINGW-NEXT:    [[CALL2:%.*]] = call noundef i32 @_ZL18static_noinline_fni(i32 noundef 0)
307*94c0db06SAlexander Richardson// MINGW-NEXT:    store i32 [[CALL2]], ptr [[RETVAL]], align 4
308*94c0db06SAlexander Richardson// MINGW-NEXT:    call void @_ZN3FooD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[F]]) #[[ATTR2]]
309*94c0db06SAlexander Richardson// MINGW-NEXT:    [[TMP0:%.*]] = load i32, ptr [[RETVAL]], align 4
310*94c0db06SAlexander Richardson// MINGW-NEXT:    ret i32 [[TMP0]]
311*94c0db06SAlexander Richardson//
312*94c0db06SAlexander Richardson//
313*94c0db06SAlexander Richardson// MINGW-LABEL: define linkonce_odr dso_local noundef i32 @_ZNK3Foo23function_defined_inlineEi(
314*94c0db06SAlexander Richardson// MINGW-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
315*94c0db06SAlexander Richardson// MINGW-NEXT:  [[ENTRY:.*:]]
316*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
317*94c0db06SAlexander Richardson// MINGW-NEXT:    [[ARG_ADDR:%.*]] = alloca i32, align 4
318*94c0db06SAlexander Richardson// MINGW-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
319*94c0db06SAlexander Richardson// MINGW-NEXT:    store i32 [[ARG]], ptr [[ARG_ADDR]], align 4
320*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
321*94c0db06SAlexander Richardson// MINGW-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARG_ADDR]], align 4
322*94c0db06SAlexander Richardson// MINGW-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[CLASS_FOO:%.*]], ptr [[THIS1]], i32 0, i32 0
323*94c0db06SAlexander Richardson// MINGW-NEXT:    [[TMP1:%.*]] = load i32, ptr [[X]], align 4
324*94c0db06SAlexander Richardson// MINGW-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
325*94c0db06SAlexander Richardson// MINGW-NEXT:    ret i32 [[ADD]]
326*94c0db06SAlexander Richardson//
327*94c0db06SAlexander Richardson//
328*94c0db06SAlexander Richardson// MINGW-LABEL: define linkonce_odr dso_local noundef i32 @_ZNK3Foo28function_defined_out_of_lineEi(
329*94c0db06SAlexander Richardson// MINGW-SAME: ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
330*94c0db06SAlexander Richardson// MINGW-NEXT:  [[ENTRY:.*:]]
331*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
332*94c0db06SAlexander Richardson// MINGW-NEXT:    [[ARG_ADDR:%.*]] = alloca i32, align 4
333*94c0db06SAlexander Richardson// MINGW-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
334*94c0db06SAlexander Richardson// MINGW-NEXT:    store i32 [[ARG]], ptr [[ARG_ADDR]], align 4
335*94c0db06SAlexander Richardson// MINGW-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
336*94c0db06SAlexander Richardson// MINGW-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[CLASS_FOO:%.*]], ptr [[THIS1]], i32 0, i32 0
337*94c0db06SAlexander Richardson// MINGW-NEXT:    [[TMP0:%.*]] = load i32, ptr [[X]], align 4
338*94c0db06SAlexander Richardson// MINGW-NEXT:    [[TMP1:%.*]] = load i32, ptr [[ARG_ADDR]], align 4
339*94c0db06SAlexander Richardson// MINGW-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP0]], [[TMP1]]
340*94c0db06SAlexander Richardson// MINGW-NEXT:    ret i32 [[SUB]]
341*94c0db06SAlexander Richardson//
342*94c0db06SAlexander Richardson//
343*94c0db06SAlexander Richardson// MINGW-LABEL: define internal noundef i32 @_ZL18static_noinline_fni(
344*94c0db06SAlexander Richardson// MINGW-SAME: i32 noundef [[ARG:%.*]]) #[[ATTR0]] {
345*94c0db06SAlexander Richardson// MINGW-NEXT:  [[ENTRY:.*:]]
346*94c0db06SAlexander Richardson// MINGW-NEXT:    [[ARG_ADDR:%.*]] = alloca i32, align 4
347*94c0db06SAlexander Richardson// MINGW-NEXT:    store i32 [[ARG]], ptr [[ARG_ADDR]], align 4
348*94c0db06SAlexander Richardson// MINGW-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARG_ADDR]], align 4
349*94c0db06SAlexander Richardson// MINGW-NEXT:    ret i32 [[TMP0]]
350*94c0db06SAlexander Richardson//
351