1cc59e91a50dae1e0fdcbb0757a69a2941b2ba69cNAKAMURA Takumi// REQUIRES: x86-64-registered-target
2b2e2157f905b0b6e27f1d3f5e1f38778c6731813Chad Rosier// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -O0 -fasm-blocks -emit-llvm -o - | FileCheck %s
325bc47ee5b7a5db8821c9ef5fddd2837c1301953Chad Rosier
4b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosiervoid t1() {
5b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosier// CHECK: @t1
687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"()
7b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosier// CHECK: ret void
8b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosier  __asm {}
9b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosier}
10265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier
11265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosiervoid t2() {
12265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: @t2
1387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"()
1487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"()
1587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"()
16265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: ret void
17265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier  __asm nop
18265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier  __asm nop
19265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier  __asm nop
20265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier}
21265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier
22265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosiervoid t3() {
23265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: @t3
2487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "nop\0A\09nop\0A\09nop", "~{dirflag},~{fpsr},~{flags}"()
25265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: ret void
26265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier  __asm nop __asm nop __asm nop
27265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier}
28265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier
29265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosiervoid t4(void) {
30265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: @t4
3187d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ebx, eax", "~{ebx},~{dirflag},~{fpsr},~{flags}"()
3287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ecx, ebx", "~{ecx},~{dirflag},~{fpsr},~{flags}"()
33265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: ret void
34265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier  __asm mov ebx, eax
35265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier  __asm mov ecx, ebx
36265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier}
37265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier
38265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosiervoid t5(void) {
39265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: @t5
4087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ebx, eax\0A\09mov ecx, ebx", "~{ebx},~{ecx},~{dirflag},~{fpsr},~{flags}"()
41265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: ret void
42265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier  __asm mov ebx, eax __asm mov ecx, ebx
43265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier}
4427ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier
4527ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosiervoid t6(void) {
4627ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier  __asm int 0x2c
4727ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier// CHECK: t6
4887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "int $$0x2c", "~{dirflag},~{fpsr},~{flags}"()
4927ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier}
5027ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier
517fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosiervoid t7() {
5227ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier  __asm {
5327ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier    int 0x2c ; } asm comments are fun! }{
5427ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier  }
5527ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier  __asm {}
567fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosier// CHECK: t7
5787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "int $$0x2c", "~{dirflag},~{fpsr},~{flags}"()
5887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"()
5927ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier}
60ac9289deef6536e47b0da2c6d67d0a74e777b5a2Chad Rosier
617fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosierint t8() {
62d9b56edcf42232c5331f9ad79aae83ba31e852dfChad Rosier  __asm int 4 ; } comments for single-line asm
6327ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier  __asm {}
6427ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier  __asm int 4
6527ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier  return 10;
667fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosier// CHECK: t8
6787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "int $$4", "~{dirflag},~{fpsr},~{flags}"()
6887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"()
6987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "int $$4", "~{dirflag},~{fpsr},~{flags}"()
7027ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier// CHECK: ret i32 10
7127ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier}
72ac9289deef6536e47b0da2c6d67d0a74e777b5a2Chad Rosier
737fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosiervoid t9() {
7427ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier  __asm {
7527ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier    push ebx
7627ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier    mov ebx, 0x07
7727ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier    pop ebx
7827ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier  }
797fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosier// CHECK: t9
8087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "push ebx\0A\09mov ebx, $$0x07\0A\09pop ebx", "~{ebx},~{dirflag},~{fpsr},~{flags}"()
8127ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier}
82f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier
837fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosierunsigned t10(void) {
84f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier  unsigned i = 1, j;
85f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier  __asm {
86f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier    mov eax, i
87f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier    mov j, eax
88f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier  }
89f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier  return j;
907fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosier// CHECK: t10
91f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: [[I:%[a-zA-Z0-9]+]] = alloca i32, align 4
92f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: [[J:%[a-zA-Z0-9]+]] = alloca i32, align 4
93f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: store i32 1, i32* [[I]], align 4
9487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $1\0A\09mov dword ptr $0, eax", "=*m,*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}, i32* %{{.*}})
95f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: [[RET:%[a-zA-Z0-9]+]] = load i32* [[J]], align 4
96f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: ret i32 [[RET]]
97f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier}
98700ce64db453624d2a3f2d34d25207c97b2b064fChad Rosier
997fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosiervoid t11(void) {
1004de971651ba09009d4a7cc6d2fbc978dd7092263Chad Rosier  __asm mov eax, 1
101fba3fb9a14f2d729639e0fdb834e3eeb40a8a12aChad Rosier// CHECK: t11
10287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"()
1034de971651ba09009d4a7cc6d2fbc978dd7092263Chad Rosier}
1047f9678b513f926dae27234858ed2586a6eb03b7bChad Rosier
105fba3fb9a14f2d729639e0fdb834e3eeb40a8a12aChad Rosierunsigned t12(void) {
106b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier  unsigned i = 1, j, l = 1, m;
107b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier  __asm {
108b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier    mov eax, i
109b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier    mov j, eax
110b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier    mov eax, l
111b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier    mov m, eax
112b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier  }
113b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier  return j + m;
114fba3fb9a14f2d729639e0fdb834e3eeb40a8a12aChad Rosier// CHECK: t12
11587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $2\0A\09mov dword ptr $0, eax\0A\09mov eax, dword ptr $3\0A\09mov dword ptr $1, eax", "=*m,=*m,*m,*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}, i32* %{{.*}}, i32* %{{.*}}, i32* %{{.*}})
116362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier}
117362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier
118362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosiervoid t13() {
119362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier  char i = 1;
120362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier  short j = 2;
121362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier  __asm movzx eax, i
122362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier  __asm movzx eax, j
123362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier// CHECK: t13
12487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "movzx eax, byte ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i8* %{{.*}})
12587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "movzx eax, word ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i16* %{{.*}})
126b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier}
127b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier
128b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosiervoid t14() {
129b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier  unsigned i = 1, j = 2;
130b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier  __asm {
131b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier    .if 1
132b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier    mov eax, i
133b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier    .else
134b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier    mov ebx, j
135b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier    .endif
136b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier  }
137b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier// CHECK: t14
13887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".if 1\0A\09mov eax, dword ptr $0\0A\09.else\0A\09mov ebx, j\0A\09.endif", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
139b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier}
1405a12aca46db5477f7e35a70dbec8d3afe5549ac0Chad Rosier
1416949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosierint gvar = 10;
1425a12aca46db5477f7e35a70dbec8d3afe5549ac0Chad Rosiervoid t15() {
1436949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosier  int lvar = 10;
1446949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosier  __asm mov eax, lvar        ; eax = 10
1456949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosier  __asm mov eax, offset lvar ; eax = address of lvar
1466949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosier  __asm mov eax, offset gvar ; eax = address of gvar
1475a12aca46db5477f7e35a70dbec8d3afe5549ac0Chad Rosier// CHECK: t15
14887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
14987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $0", "r,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
15087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $0", "r,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* @{{.*}})
1515a12aca46db5477f7e35a70dbec8d3afe5549ac0Chad Rosier}
15242242552fe9769fba3c1a1f82e181688675908f0Chad Rosier
15342242552fe9769fba3c1a1f82e181688675908f0Chad Rosiervoid t16() {
15442242552fe9769fba3c1a1f82e181688675908f0Chad Rosier  int var = 10;
15542242552fe9769fba3c1a1f82e181688675908f0Chad Rosier  __asm mov [eax], offset var
15642242552fe9769fba3c1a1f82e181688675908f0Chad Rosier// CHECK: t16
15787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov [eax], $0", "r,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
15842242552fe9769fba3c1a1f82e181688675908f0Chad Rosier}
1591bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier
1601bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosiervoid t17() {
1611bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier  __asm _emit 0x4A
1621bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier  __asm _emit 0x43
1631bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier  __asm _emit 0x4B
1647243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier  __asm _EMIT 0x4B
1651bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier// CHECK: t17
16687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK:  call void asm sideeffect inteldialect ".byte 0x4A", "~{dirflag},~{fpsr},~{flags}"()
16787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK:  call void asm sideeffect inteldialect ".byte 0x43", "~{dirflag},~{fpsr},~{flags}"()
16887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK:  call void asm sideeffect inteldialect ".byte 0x4B", "~{dirflag},~{fpsr},~{flags}"()
16987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK:  call void asm sideeffect inteldialect ".byte 0x4B", "~{dirflag},~{fpsr},~{flags}"()
1701bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier}
171f7427273d0aeed94d025629f98e3099112107628Chad Rosier
172da5c3b7fa13e35bdc6973ca2a314cbbfe26f71d1Chad Rosiervoid t20() {
173205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  char bar;
174da5c3b7fa13e35bdc6973ca2a314cbbfe26f71d1Chad Rosier  int foo;
175205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  char _bar[2];
176205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  int _foo[4];
177205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier
178205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, LENGTH foo
179205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, LENGTH bar
180205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, LENGTH _foo
181205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, LENGTH _bar
182da5c3b7fa13e35bdc6973ca2a314cbbfe26f71d1Chad Rosier// CHECK: t20
18387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"()
18487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"()
18587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"()
18687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$2", "~{eax},~{dirflag},~{fpsr},~{flags}"()
187205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier
188205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, TYPE foo
189205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, TYPE bar
190205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, TYPE _foo
191205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, TYPE _bar
19287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"()
19387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"()
19487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"()
19587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"()
196205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier
197205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, SIZE foo
198205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, SIZE bar
199205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, SIZE _foo
200205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier  __asm mov eax, SIZE _bar
20187d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"()
20287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"()
20387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$16", "~{eax},~{dirflag},~{fpsr},~{flags}"()
20487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$2", "~{eax},~{dirflag},~{fpsr},~{flags}"()
205da5c3b7fa13e35bdc6973ca2a314cbbfe26f71d1Chad Rosier}
206e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier
207e0c01963514ed158208cde1f3a0343a788156e27Chad Rosiervoid t21() {
208e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier  __asm {
209e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier    __asm push ebx
210e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier    __asm mov ebx, 0x07
211e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier    __asm pop ebx
212e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier  }
213e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier// CHECK: t21
21487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "push ebx\0A\09mov ebx, $$0x07\0A\09pop ebx", "~{ebx},~{dirflag},~{fpsr},~{flags}"()
215e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier}
216e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier
217e0c01963514ed158208cde1f3a0343a788156e27Chad Rosierextern void t22_helper(int x);
218e0c01963514ed158208cde1f3a0343a788156e27Chad Rosiervoid t22() {
219e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier  int x = 0;
220e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier  __asm {
221e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier    __asm push ebx
222e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier    __asm mov ebx, esp
223e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier  }
224e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier  t22_helper(x);
225e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier  __asm {
226e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier    __asm mov esp, ebx
227e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier    __asm pop ebx
228e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier  }
229e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier// CHECK: t22
23087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "push ebx\0A\09mov ebx, esp", "~{ebx},~{dirflag},~{fpsr},~{flags}"()
231e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier// CHECK: call void @t22_helper
23287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov esp, ebx\0A\09pop ebx", "~{ebx},~{esp},~{dirflag},~{fpsr},~{flags}"()
233e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier}
2347520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier
2357520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosiervoid t23() {
2367520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier  __asm {
2377520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier  the_label:
2387520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier  }
2397520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier// CHECK: t23
24087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "the_label:", "~{dirflag},~{fpsr},~{flags}"()
2417520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier}
2423731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosier
2433731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosiervoid t24_helper(void) {}
2443731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosiervoid t24() {
2453731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosier  __asm call t24_helper
2463731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosier// CHECK: t24
24787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "call $0", "r,~{dirflag},~{fpsr},~{flags}"(void ()* @t24_helper)
2483731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosier}
2498e70b00253f7c00814795ae287030efc2053ce8cChad Rosier
2508e70b00253f7c00814795ae287030efc2053ce8cChad Rosiervoid t25() {
2518e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm mov eax, 0ffffffffh
2528e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm mov eax, 0fh
2538e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm mov eax, 0a2h
2548e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm mov eax, 0xa2h
2558e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm mov eax, 0xa2
2568e70b00253f7c00814795ae287030efc2053ce8cChad Rosier// CHECK: t25
2577b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4294967295", "~{eax},~{dirflag},~{fpsr},~{flags}"()
2587b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$15", "~{eax},~{dirflag},~{fpsr},~{flags}"()
2597b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$162", "~{eax},~{dirflag},~{fpsr},~{flags}"()
26087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$0xa2h", "~{eax},~{dirflag},~{fpsr},~{flags}"()
26187d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$0xa2", "~{eax},~{dirflag},~{fpsr},~{flags}"()
2628e70b00253f7c00814795ae287030efc2053ce8cChad Rosier}
2638e70b00253f7c00814795ae287030efc2053ce8cChad Rosier
2648e70b00253f7c00814795ae287030efc2053ce8cChad Rosiervoid t26() {
2658e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm pushad
2668e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm mov eax, 0
2678e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm __emit 0fh
2688e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm __emit 0a2h
2697243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier  __asm __EMIT 0a2h
2708e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm popad
2718e70b00253f7c00814795ae287030efc2053ce8cChad Rosier// CHECK: t26
27287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "pushad", "~{dirflag},~{fpsr},~{flags}"()
27387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$0", "~{eax},~{dirflag},~{fpsr},~{flags}"()
27487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0fh", "~{dirflag},~{fpsr},~{flags}"()
27587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0a2h", "~{dirflag},~{fpsr},~{flags}"()
27687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0a2h", "~{dirflag},~{fpsr},~{flags}"()
27787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "popad", "~{dirflag},~{fpsr},~{flags}"()
2788e70b00253f7c00814795ae287030efc2053ce8cChad Rosier}
2798e70b00253f7c00814795ae287030efc2053ce8cChad Rosier
2808e70b00253f7c00814795ae287030efc2053ce8cChad Rosiervoid t27() {
2818e70b00253f7c00814795ae287030efc2053ce8cChad Rosier  __asm mov eax, fs:[0h]
2828e70b00253f7c00814795ae287030efc2053ce8cChad Rosier// CHECK: t27
283b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, fs:[$$0h]", "~{eax},~{dirflag},~{fpsr},~{flags}"()
2848e70b00253f7c00814795ae287030efc2053ce8cChad Rosier}
2857243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier
2867243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosiervoid t28() {
2877243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier  __asm align 8
2887243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier  __asm align 16;
2897243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier  __asm align 128;
2907243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier  __asm ALIGN 256;
2917243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier// CHECK: t28
29287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".align 3", "~{dirflag},~{fpsr},~{flags}"()
29387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".align 4", "~{dirflag},~{fpsr},~{flags}"()
29487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".align 7", "~{dirflag},~{fpsr},~{flags}"()
29587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".align 8", "~{dirflag},~{fpsr},~{flags}"()
2967243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier}
29774992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier
29874992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosiervoid t29() {
29974992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier  int arr[2] = {0, 0};
30074992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier  int olen = 0, osize = 0, otype = 0;
30174992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier  __asm mov olen, LENGTH arr
30274992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier  __asm mov osize, SIZE arr
30374992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier  __asm mov otype, TYPE arr
30474992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier// CHECK: t29
30587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, $$2", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
30687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, $$8", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
30787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, $$4", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
30874992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier}
309d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier
310d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosierint results[2] = {13, 37};
311d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosierint *t30()
312d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier{
313d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier  int *res;
314d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier  __asm lea edi, results
315d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier  __asm mov res, edi
316d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier  return res;
317d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier// CHECK: t30
31887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "lea edi, dword ptr $0", "*m,~{edi},~{dirflag},~{fpsr},~{flags}"([2 x i32]* @{{.*}})
31987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, edi", "=*m,~{dirflag},~{fpsr},~{flags}"(i32** %{{.*}})
320d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier}
3214e1125f630e75a52209b928e9d43b638abf39987Bill Wendling
32259c900304a390b11c4efcad2924bf6373979db73Chad Rosiervoid t31() {
32359c900304a390b11c4efcad2924bf6373979db73Chad Rosier  __asm pushad
32459c900304a390b11c4efcad2924bf6373979db73Chad Rosier  __asm popad
32559c900304a390b11c4efcad2924bf6373979db73Chad Rosier// CHECK: t31
32687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "pushad", "~{dirflag},~{fpsr},~{flags}"()
32787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "popad", "~{dirflag},~{fpsr},~{flags}"()
32859c900304a390b11c4efcad2924bf6373979db73Chad Rosier}
32959c900304a390b11c4efcad2924bf6373979db73Chad Rosier
3302317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosiervoid t32() {
3312317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier  int i;
3322317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier  __asm mov eax, i
3332317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier  __asm mov eax, dword ptr i
3342317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier  __asm mov ax, word ptr i
3352317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier  __asm mov al, byte ptr i
3362317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier// CHECK: t32
33787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
33887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
33987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ax, word ptr $0", "*m,~{ax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
34087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov al, byte ptr $0", "*m,~{al},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
3412317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier}
3422317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier
343c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosiervoid t33() {
344c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier  int i;
345c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier  __asm mov eax, [i]
346c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier  __asm mov eax, dword ptr [i]
347c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier  __asm mov ax, word ptr [i]
348c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier  __asm mov al, byte ptr [i]
349c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier// CHECK: t33
35087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
35187d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
35287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ax, word ptr $0", "*m,~{ax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
35387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov al, byte ptr $0", "*m,~{al},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
354c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier}
355c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier
3565e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosiervoid t34() {
3575e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier  __asm prefetchnta 64[eax]
3585e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier  __asm mov eax, dword ptr 4[eax]
3595e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier// CHECK: t34
3605e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier// CHECK: call void asm sideeffect inteldialect "prefetchnta $$64[eax]", "~{dirflag},~{fpsr},~{flags}"()
3615e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4[eax]", "~{eax},~{dirflag},~{fpsr},~{flags}"()
3625e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier}
363b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier
364b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosiervoid t35() {
365b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier  __asm prefetchnta [eax + (200*64)]
366b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier  __asm mov eax, dword ptr [eax + (200*64)]
367b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier// CHECK: t35
368b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier// CHECK: call void asm sideeffect inteldialect "prefetchnta [eax + ($$200*$$64)]", "~{dirflag},~{fpsr},~{flags}"()
369b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr [eax + ($$200*$$64)]", "~{eax},~{dirflag},~{fpsr},~{flags}"()
370b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier}
37136ec9c2160041efa41320c843882ae104f43350bChad Rosier
37236ec9c2160041efa41320c843882ae104f43350bChad Rosiervoid t36() {
37336ec9c2160041efa41320c843882ae104f43350bChad Rosier  int arr[4];
37436ec9c2160041efa41320c843882ae104f43350bChad Rosier  __asm mov eax, 4[arr]
3750c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier  __asm mov eax, 4[arr + 4]
3760c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier  __asm mov eax, 8[arr + 4 + 32*2 - 4]
3770c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier  __asm mov eax, 12[4 + arr]
3780c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier  __asm mov eax, 4[4 + arr + 4]
3790c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier  __asm mov eax, 4[64 + arr + (2*32)]
3800c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier  __asm mov eax, 4[64 + arr - 2*32]
381a5ceca924c33bfa6e1d7b3e6e3cac7c24cbf3633Chad Rosier  __asm mov eax, [arr + 4]
382579d8d1b77564bf5ce14245b8474066728f54e53Chad Rosier  __asm mov eax, [arr + 4 + 32*2 - 4]
383a5ceca924c33bfa6e1d7b3e6e3cac7c24cbf3633Chad Rosier  __asm mov eax, [4 + arr]
384a5ceca924c33bfa6e1d7b3e6e3cac7c24cbf3633Chad Rosier  __asm mov eax, [4 + arr + 4]
385333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier  __asm mov eax, [64 + arr + (2*32)]
386333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier  __asm mov eax, [64 + arr - 2*32]
38736ec9c2160041efa41320c843882ae104f43350bChad Rosier// CHECK: t36
388333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
3890c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
3900c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$72$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
3910c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$16$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
3920c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$12$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
3930c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$132$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
3940c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
395579d8d1b77564bf5ce14245b8474066728f54e53Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
396579d8d1b77564bf5ce14245b8474066728f54e53Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$64$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
397333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
398333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
399333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$128$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
400333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
40136ec9c2160041efa41320c843882ae104f43350bChad Rosier}
4027b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier
4037b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosiervoid t37() {
4047b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, 4 + 8
4057b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, 4 + 8 * 16
4067b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, -4 + 8 * 16
4077b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, (4 + 4) * 16
408abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier  __asm mov eax, 4 + 8 * -16
409abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier  __asm mov eax, 4 + 16 / -8
410abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier  __asm mov eax, (16 + 16) / -8
4117b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: t37
4127b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$12", "~{eax},~{dirflag},~{fpsr},~{flags}"()
4137b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$132", "~{eax},~{dirflag},~{fpsr},~{flags}"()
4147b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$124", "~{eax},~{dirflag},~{fpsr},~{flags}"()
4157b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$128", "~{eax},~{dirflag},~{fpsr},~{flags}"()
416abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4294967172", "~{eax},~{dirflag},~{fpsr},~{flags}"()
417abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$2", "~{eax},~{dirflag},~{fpsr},~{flags}"()
418abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4294967292", "~{eax},~{dirflag},~{fpsr},~{flags}"()
4197b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier}
4207b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier
4217b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosiervoid t38() {
4227b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  int arr[4];
4237b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, 4+4[arr]
4247b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, (4+4)[arr + 4]
4257b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, 8*2[arr + 4 + 32*2 - 4]
4267b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, 12+20[4 + arr]
4277b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, 4*16+4[4 + arr + 4]
4287b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, 4*4[64 + arr + (2*32)]
4297b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, 4*(4-2)[64 + arr - 2*32]
4307b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier  __asm mov eax, 32*(4-2)[arr - 2*32]
43168ea1d26ff6cdd3b8bcd37dd88b24d430e71581aChad Rosier// CHECK: t38
4327b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
4337b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$12$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
4347b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$80$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
4357b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$36$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
4367b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$76$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
4377b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$144$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
4387b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
4397b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$0$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}})
4407b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier}
441