|  | // REQUIRES: x86-registered-target | 
|  |  | 
|  | // RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-pc-win32 -fasm-blocks -emit-llvm %s -o - | FileCheck %s | 
|  | class t1 { | 
|  | public: | 
|  | double a; | 
|  | void runc(); | 
|  | }; | 
|  |  | 
|  | class t2 { | 
|  | public: | 
|  | double a; | 
|  | void runc(); | 
|  | }; | 
|  |  | 
|  | // CHECK: define dso_local void @"?runc@t2@@ | 
|  | void t2::runc() { | 
|  | double num = 0; | 
|  | __asm { | 
|  | mov rax,[this] | 
|  | // CHECK: [[THIS_ADDR_T2:%.+]] = alloca %class.t2* | 
|  | // CHECK: [[THIS1_T2:%.+]] = load %class.t2*, %class.t2** [[THIS_ADDR_T2]], | 
|  | // CHECK: call void asm sideeffect inteldialect "mov rax,qword ptr $1{{.*}}%class.t2* [[THIS1_T2]] | 
|  | mov rbx,[rax] | 
|  | mov num, rbx | 
|  | }; | 
|  | } | 
|  |  | 
|  | // CHECK: define dso_local void @"?runc@t1@@ | 
|  | void t1::runc() { | 
|  | double num = 0; | 
|  | __asm { | 
|  | mov rax,[this] | 
|  | // CHECK: [[THIS_ADDR_T1:%.+]] = alloca %class.t1* | 
|  | // CHECK: [[THIS1_T1:%.+]] = load %class.t1*, %class.t1** [[THIS_ADDR_T1]], | 
|  | // CHECK: call void asm sideeffect inteldialect "mov rax,qword ptr $1{{.*}}%class.t1* [[THIS1_T1]] | 
|  | mov rbx,[rax] | 
|  | mov num, rbx | 
|  | }; | 
|  | } | 
|  |  | 
|  | struct s { | 
|  | int a; | 
|  | // CHECK: define linkonce_odr dso_local void @"?func@s@@ | 
|  | void func() { | 
|  | __asm mov rax, [this] | 
|  | // CHECK: [[THIS_ADDR_S:%.+]] = alloca %struct.s* | 
|  | // CHECK: [[THIS1_S:%.+]] = load %struct.s*, %struct.s** [[THIS_ADDR_S]], | 
|  | // CHECK: call void asm sideeffect inteldialect "mov rax, qword ptr $0{{.*}}%struct.s* [[THIS1_S]] | 
|  | } | 
|  | } f3; | 
|  |  | 
|  | int main() { | 
|  | f3.func(); | 
|  | f3.a=1; | 
|  | return 0; | 
|  | } |