// REQUIRES: x86-registered-target // RUN: %clang_cc1 -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; } |