mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 04:33:05 +00:00
4d5bee428f
The combination of inline asm, stack realignment, and dynamic allocas turns out to be too common to reject out of hand. ASan inserts empy inline asm fragments and uses aligned allocas. Compiling any trivial function containing a dynamic alloca with ASan is enough to trigger the check. XFAIL the test cases that would be miscompiled and add one that uses the relevant functionality. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196986 91177308-0d34-0410-b5e6-96231b3b80d8
30 lines
615 B
LLVM
30 lines
615 B
LLVM
; 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
|