summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86')
-rw-r--r--llvm/test/CodeGen/X86/inline-asm-stack-realign.ll6
-rw-r--r--llvm/test/CodeGen/X86/inline-asm-stack-realign2.ll5
-rw-r--r--llvm/test/CodeGen/X86/inline-asm-stack-realign3.ll29
3 files changed, 35 insertions, 5 deletions
diff --git a/llvm/test/CodeGen/X86/inline-asm-stack-realign.ll b/llvm/test/CodeGen/X86/inline-asm-stack-realign.ll
index 476a628c8bb..de98200a3a9 100644
--- a/llvm/test/CodeGen/X86/inline-asm-stack-realign.ll
+++ b/llvm/test/CodeGen/X86/inline-asm-stack-realign.ll
@@ -1,8 +1,8 @@
; RUN: not llc -mtriple=i686-pc-win32 < %s 2>&1 | FileCheck %s
-; We don't currently support realigning the stack and adjusting the stack
-; pointer in inline asm. This commonly happens in MS inline assembly using
-; push and pop.
+; FIXME: This is miscompiled due to our unconditional use of ESI as the base
+; pointer.
+; XFAIL:
; CHECK: Stack realignment in presence of dynamic stack adjustments is not supported with inline assembly
diff --git a/llvm/test/CodeGen/X86/inline-asm-stack-realign2.ll b/llvm/test/CodeGen/X86/inline-asm-stack-realign2.ll
index 2f042e84c5a..4861c2040ec 100644
--- a/llvm/test/CodeGen/X86/inline-asm-stack-realign2.ll
+++ b/llvm/test/CodeGen/X86/inline-asm-stack-realign2.ll
@@ -1,7 +1,8 @@
; RUN: not llc -mtriple=i686-pc-win32 < %s 2>&1 | FileCheck %s
-; We don't currently support realigning the stack and adjusting the stack
-; pointer in inline asm. This can even happen in GNU asm.
+; FIXME: This is miscompiled due to our unconditional use of ESI as the base
+; pointer.
+; XFAIL:
; CHECK: Stack realignment in presence of dynamic stack adjustments is not supported with inline assembly
diff --git a/llvm/test/CodeGen/X86/inline-asm-stack-realign3.ll b/llvm/test/CodeGen/X86/inline-asm-stack-realign3.ll
new file mode 100644
index 00000000000..cdb77ca3ea3
--- /dev/null
+++ b/llvm/test/CodeGen/X86/inline-asm-stack-realign3.ll
@@ -0,0 +1,29 @@
+; RUN: llc -march=x86 < %s | FileCheck %s
+
+declare void @bar(i32* %junk)
+
+define i32 @foo(i1 %cond) {
+entry:
+ %r = alloca i32, align 128
+ store i32 -1, i32* %r, align 128
+ br i1 %cond, label %doit, label %skip
+
+doit:
+ call void asm sideeffect "xor %ecx, %ecx\0A\09mov %ecx, $0", "=*m,~{ecx},~{flags}"(i32* %r)
+ %junk = alloca i32
+ call void @bar(i32* %junk)
+ br label %skip
+
+skip:
+ %0 = load i32* %r, align 128
+ ret i32 %0
+}
+
+; CHECK-LABEL: foo:
+; CHECK: pushl %ebp
+; CHECK: andl $-128, %esp
+; CHECK: xor %ecx, %ecx
+; CHECK-NEXT: mov %ecx, (%esi)
+; CHECK: movl (%esi), %eax
+; CHECK: popl %ebp
+; CHECK: ret
OpenPOWER on IntegriCloud