1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// REQUIRES: x86-registered-target 2a3f55b026fc24db6a4e275a8e4110d071122b99dRafael Espindola// RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -fasm-blocks -emit-llvm -o - | FileCheck %s 3e72faf6148aadae316ce1fa2deb8289c10ee1ab9Chad Rosier 4e72faf6148aadae316ce1fa2deb8289c10ee1ab9Chad Rosiervoid t1() { 5e72faf6148aadae316ce1fa2deb8289c10ee1ab9Chad Rosier int var = 10; 6e72faf6148aadae316ce1fa2deb8289c10ee1ab9Chad Rosier __asm mov rax, offset var ; rax = address of myvar 7e72faf6148aadae316ce1fa2deb8289c10ee1ab9Chad Rosier// CHECK: t1 8b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov rax, $0", "r,~{rax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 9e72faf6148aadae316ce1fa2deb8289c10ee1ab9Chad Rosier} 1042242552fe9769fba3c1a1f82e181688675908f0Chad Rosier 1142242552fe9769fba3c1a1f82e181688675908f0Chad Rosiervoid t2() { 1242242552fe9769fba3c1a1f82e181688675908f0Chad Rosier int var = 10; 1342242552fe9769fba3c1a1f82e181688675908f0Chad Rosier __asm mov [eax], offset var 1442242552fe9769fba3c1a1f82e181688675908f0Chad Rosier// CHECK: t2 15b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov [eax], $0", "r,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 1642242552fe9769fba3c1a1f82e181688675908f0Chad Rosier} 174e1125f630e75a52209b928e9d43b638abf39987Bill Wendling 18b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosierstruct t3_type { int a, b; }; 19b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier 20b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosierint t3() { 21b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier struct t3_type foo; 22b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier foo.a = 1; 23b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier foo.b = 2; 24b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier __asm { 25b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier lea ebx, foo 26b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier mov eax, [ebx].0 27b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier mov [ebx].4, ecx 28b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier } 29b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier return foo.b; 30b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier// CHECK: t3 31b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier// CHECK: call void asm sideeffect inteldialect "lea ebx, qword ptr $0\0A\09mov eax, [ebx].0\0A\09mov [ebx].4, ecx", "*m,~{eax},~{ebx},~{dirflag},~{fpsr},~{flags}"(%struct.t3_type* %{{.*}}) 32b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier} 33b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier 34b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosierint t4() { 35b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier struct t3_type foo; 36b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier foo.a = 1; 37b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier foo.b = 2; 38b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier __asm { 39b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier lea ebx, foo 40ef8225444452a1486bd721f3285301fe84643b00Stephen Hines { 41ef8225444452a1486bd721f3285301fe84643b00Stephen Hines mov eax, [ebx].foo.a 42ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 43b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier mov [ebx].foo.b, ecx 44b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier } 45b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier return foo.b; 46b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier// CHECK: t4 47b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier// CHECK: call void asm sideeffect inteldialect "lea ebx, qword ptr $0\0A\09mov eax, [ebx].0\0A\09mov [ebx].4, ecx", "*m,~{eax},~{ebx},~{dirflag},~{fpsr},~{flags}"(%struct.t3_type* %{{.*}}) 48b55dd767b2db98f6e4f9128514cb93fe156e7d75Chad Rosier} 49