1*67e74705SXin Li // REQUIRES: x86-registered-target
2*67e74705SXin Li
3*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-pc-win32 -fasm-blocks -emit-llvm %s -o - | FileCheck %s
4*67e74705SXin Li class t1 {
5*67e74705SXin Li public:
6*67e74705SXin Li double a;
7*67e74705SXin Li void runc();
8*67e74705SXin Li };
9*67e74705SXin Li
10*67e74705SXin Li class t2 {
11*67e74705SXin Li public:
12*67e74705SXin Li double a;
13*67e74705SXin Li void runc();
14*67e74705SXin Li };
15*67e74705SXin Li
16*67e74705SXin Li // CHECK: define void @"\01?runc@t2@@
runc()17*67e74705SXin Li void t2::runc() {
18*67e74705SXin Li double num = 0;
19*67e74705SXin Li __asm {
20*67e74705SXin Li mov rax,[this]
21*67e74705SXin Li // CHECK: [[THIS_ADDR_T2:%.+]] = alloca %class.t2*
22*67e74705SXin Li // CHECK: [[THIS1_T2:%.+]] = load %class.t2*, %class.t2** [[THIS_ADDR_T2]],
23*67e74705SXin Li // CHECK: call void asm sideeffect inteldialect "mov rax,qword ptr $1{{.*}}%class.t2* [[THIS1_T2]]
24*67e74705SXin Li mov rbx,[rax]
25*67e74705SXin Li mov num, rbx
26*67e74705SXin Li };
27*67e74705SXin Li }
28*67e74705SXin Li
29*67e74705SXin Li // CHECK: define void @"\01?runc@t1@@
runc()30*67e74705SXin Li void t1::runc() {
31*67e74705SXin Li double num = 0;
32*67e74705SXin Li __asm {
33*67e74705SXin Li mov rax,[this]
34*67e74705SXin Li // CHECK: [[THIS_ADDR_T1:%.+]] = alloca %class.t1*
35*67e74705SXin Li // CHECK: [[THIS1_T1:%.+]] = load %class.t1*, %class.t1** [[THIS_ADDR_T1]],
36*67e74705SXin Li // CHECK: call void asm sideeffect inteldialect "mov rax,qword ptr $1{{.*}}%class.t1* [[THIS1_T1]]
37*67e74705SXin Li mov rbx,[rax]
38*67e74705SXin Li mov num, rbx
39*67e74705SXin Li };
40*67e74705SXin Li }
41*67e74705SXin Li
42*67e74705SXin Li struct s {
43*67e74705SXin Li int a;
44*67e74705SXin Li // CHECK: define linkonce_odr void @"\01?func@s@@
funcs45*67e74705SXin Li void func() {
46*67e74705SXin Li __asm mov rax, [this]
47*67e74705SXin Li // CHECK: [[THIS_ADDR_S:%.+]] = alloca %struct.s*
48*67e74705SXin Li // CHECK: [[THIS1_S:%.+]] = load %struct.s*, %struct.s** [[THIS_ADDR_S]],
49*67e74705SXin Li // CHECK: call void asm sideeffect inteldialect "mov rax, qword ptr $0{{.*}}%struct.s* [[THIS1_S]]
50*67e74705SXin Li }
51*67e74705SXin Li } f3;
52*67e74705SXin Li
main()53*67e74705SXin Li int main() {
54*67e74705SXin Li f3.func();
55*67e74705SXin Li f3.a=1;
56*67e74705SXin Li return 0;
57*67e74705SXin Li }
58