blob: 8647a5bc8b8b0493ca452b897ac1d587b2584490 [file] [log] [blame]
NAKAMURA Takumi512bd572015-12-15 22:19:00 +00001// REQUIRES: x86-registered-target
Krzysztof Parzyszek6c3b8372015-12-15 19:14:24 +00002
Michael Zuckerman724d02a2015-12-15 14:35:51 +00003// RUN: %clang_cc1 -triple x86_64-pc-win32 -fasm-blocks -emit-llvm %s -o - | FileCheck %s
Michael Zuckerman229158c2015-12-15 14:04:18 +00004class t1 {
5public:
6 double a;
7 void runc();
8};
9
10class t2 {
11public:
12 double a;
13 void runc();
14};
15
NAKAMURA Takumidb87d5d2015-12-15 22:42:28 +000016// CHECK: define void @"\01?runc@t2@@
Michael Zuckerman229158c2015-12-15 14:04:18 +000017void t2::runc() {
18 double num = 0;
19 __asm {
20 mov rax,[this]
NAKAMURA Takumidb87d5d2015-12-15 22:42:28 +000021 // CHECK: [[THIS_ADDR_T2:%.+]] = alloca %class.t2*
22 // CHECK: [[THIS1_T2:%.+]] = load %class.t2*, %class.t2** [[THIS_ADDR_T2]],
23 // CHECK: call void asm sideeffect inteldialect "mov rax,qword ptr $1{{.*}}%class.t2* [[THIS1_T2]]
Michael Zuckerman229158c2015-12-15 14:04:18 +000024 mov rbx,[rax]
25 mov num, rbx
26 };
27}
28
NAKAMURA Takumidb87d5d2015-12-15 22:42:28 +000029// CHECK: define void @"\01?runc@t1@@
Michael Zuckerman229158c2015-12-15 14:04:18 +000030void t1::runc() {
31 double num = 0;
32 __asm {
33 mov rax,[this]
NAKAMURA Takumidb87d5d2015-12-15 22:42:28 +000034 // CHECK: [[THIS_ADDR_T1:%.+]] = alloca %class.t1*
35 // CHECK: [[THIS1_T1:%.+]] = load %class.t1*, %class.t1** [[THIS_ADDR_T1]],
36 // CHECK: call void asm sideeffect inteldialect "mov rax,qword ptr $1{{.*}}%class.t1* [[THIS1_T1]]
Michael Zuckerman229158c2015-12-15 14:04:18 +000037 mov rbx,[rax]
38 mov num, rbx
39 };
40}
41
42struct s {
43 int a;
NAKAMURA Takumidb87d5d2015-12-15 22:42:28 +000044 // CHECK: define linkonce_odr void @"\01?func@s@@
Michael Zuckerman229158c2015-12-15 14:04:18 +000045 void func() {
46 __asm mov rax, [this]
NAKAMURA Takumidb87d5d2015-12-15 22:42:28 +000047 // CHECK: [[THIS_ADDR_S:%.+]] = alloca %struct.s*
48 // CHECK: [[THIS1_S:%.+]] = load %struct.s*, %struct.s** [[THIS_ADDR_S]],
49 // CHECK: call void asm sideeffect inteldialect "mov rax, qword ptr $0{{.*}}%struct.s* [[THIS1_S]]
Michael Zuckerman229158c2015-12-15 14:04:18 +000050 }
51} f3;
52
53int main() {
54 f3.func();
55 f3.a=1;
56 return 0;
57}