55 %0 = tail call i32 asm sideeffect inteldialect "mov eax, $1\0A\09 mov $0, eax" , "=r,r,~{eax},~{dirflag},~{fpsr},~{flags}" (i32 1 ) nounwind
66 ret i32 %0
77; CHECK: t1
8- ; CHECK: movl %esp, %ebp
98; CHECK: {{## InlineAsm Start|#APP}}
109; CHECK: .intel_syntax
1110; CHECK: mov eax, ecx
1918 call void asm sideeffect inteldialect "mov eax, $$1" , "~{eax},~{dirflag},~{fpsr},~{flags}" () nounwind
2019 ret void
2120; CHECK: t2
22- ; CHECK: movl %esp, %ebp
2321; CHECK: {{## InlineAsm Start|#APP}}
2422; CHECK: .intel_syntax
2523; CHECK: mov eax, 1
3432 call void asm sideeffect inteldialect "mov eax, DWORD PTR [$0]" , "*m,~{eax},~{dirflag},~{fpsr},~{flags}" (i32* %V.addr ) nounwind
3533 ret void
3634; CHECK: t3
37- ; CHECK: movl %esp, %ebp
3835; CHECK: {{## InlineAsm Start|#APP}}
3936; CHECK: .intel_syntax
4037; CHECK: mov eax, DWORD PTR {{[[esp]}}
5653 %0 = load i32* %b1 , align 4
5754 ret i32 %0
5855; CHECK: t18
59- ; CHECK: movl %esp, %ebp
6056; CHECK: {{## InlineAsm Start|#APP}}
6157; CHECK: .intel_syntax
6258; CHECK: lea ebx, foo
7672 call void asm sideeffect inteldialect "call $0" , "r,~{dirflag},~{fpsr},~{flags}" (void ()* @t19_helper ) nounwind
7773 ret void
7874; CHECK-LABEL: t19:
79- ; CHECK: movl %esp, %ebp
8075; CHECK: movl ${{_?}}t19_helper, %eax
8176; CHECK: {{## InlineAsm Start|#APP}}
8277; CHECK: .intel_syntax
@@ -95,16 +90,38 @@ entry:
9590 %0 = load i32** %res , align 4
9691 ret i32* %0
9792; CHECK-LABEL: t30:
98- ; CHECK: movl %esp, %ebp
9993; CHECK: {{## InlineAsm Start|#APP}}
10094; CHECK: .intel_syntax
10195; CHECK: lea edi, dword ptr [{{_?}}results]
10296; CHECK: .att_syntax
10397; CHECK: {{## InlineAsm End|#NO_APP}}
10498; CHECK: {{## InlineAsm Start|#APP}}
10599; CHECK: .intel_syntax
106- ; CHECK: mov dword ptr [esi], edi
100+ ; CHECK: mov dword ptr [esp], edi
101+ ; CHECK: .att_syntax
102+ ; CHECK: {{## InlineAsm End|#NO_APP}}
103+ ; CHECK: movl (%esp), %eax
104+ }
105+
106+ ; Stack realignment plus MS inline asm that does *not* adjust the stack is no
107+ ; longer an error.
108+
109+ define i32 @t31 () {
110+ entry:
111+ %val = alloca i32 , align 64
112+ store i32 -1 , i32* %val , align 64
113+ call void asm sideeffect inteldialect "mov dword ptr $0, esp" , "=*m,~{dirflag},~{fpsr},~{flags}" (i32* %val ) #1
114+ %sp = load i32* %val , align 64
115+ ret i32 %sp
116+ ; CHECK-LABEL: t31:
117+ ; CHECK: pushl %ebp
118+ ; CHECK: movl %esp, %ebp
119+ ; CHECK: andl $-64, %esp
120+ ; CHECK: {{## InlineAsm Start|#APP}}
121+ ; CHECK: .intel_syntax
122+ ; CHECK: mov dword ptr [esp], esp
107123; CHECK: .att_syntax
108124; CHECK: {{## InlineAsm End|#NO_APP}}
109- ; CHECK: movl (%esi), %eax
125+ ; CHECK: movl (%esp), %eax
126+ ; CHECK: ret
110127}
0 commit comments