diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/X86/2009-06-03-Win64SpillXMM.ll | 8 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/inline-sse.ll | 4 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/pr11415.ll | 8 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/win64_frame.ll | 5 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/x86-64-flags-intrinsics.ll | 37 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/x86-flags-intrinsics.ll | 31 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/x86-win64-shrink-wrapping.ll | 4 | ||||
-rw-r--r-- | llvm/test/DebugInfo/COFF/asm.ll | 17 |
8 files changed, 84 insertions, 30 deletions
diff --git a/llvm/test/CodeGen/X86/2009-06-03-Win64SpillXMM.ll b/llvm/test/CodeGen/X86/2009-06-03-Win64SpillXMM.ll index a74aa2dd462..dfb98bb1ab3 100644 --- a/llvm/test/CodeGen/X86/2009-06-03-Win64SpillXMM.ll +++ b/llvm/test/CodeGen/X86/2009-06-03-Win64SpillXMM.ll @@ -1,9 +1,7 @@ ; RUN: llc -mcpu=generic -mtriple=x86_64-mingw32 < %s | FileCheck %s -; CHECK: pushq %rbp -; CHECK: subq $32, %rsp -; CHECK: leaq 32(%rsp), %rbp -; CHECK: movaps %xmm8, -16(%rbp) -; CHECK: movaps %xmm7, -32(%rbp) +; CHECK: subq $40, %rsp +; CHECK: movaps %xmm8, 16(%rsp) +; CHECK: movaps %xmm7, (%rsp) define i32 @a() nounwind { entry: diff --git a/llvm/test/CodeGen/X86/inline-sse.ll b/llvm/test/CodeGen/X86/inline-sse.ll index 78d6b762b5e..08819b85829 100644 --- a/llvm/test/CodeGen/X86/inline-sse.ll +++ b/llvm/test/CodeGen/X86/inline-sse.ll @@ -21,11 +21,9 @@ define void @nop() nounwind { ; ; X64-LABEL: nop: ; X64: # BB#0: -; X64-NEXT: subq $24, %rsp ; X64-NEXT: #APP ; X64-NEXT: #NO_APP -; X64-NEXT: movaps %xmm0, (%rsp) -; X64-NEXT: addq $24, %rsp +; X64-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) ; X64-NEXT: retq %1 = alloca <4 x float>, align 16 %2 = call <4 x float> asm "", "=x,~{dirflag},~{fpsr},~{flags}"() diff --git a/llvm/test/CodeGen/X86/pr11415.ll b/llvm/test/CodeGen/X86/pr11415.ll index 73c49701411..6c32a2206a7 100644 --- a/llvm/test/CodeGen/X86/pr11415.ll +++ b/llvm/test/CodeGen/X86/pr11415.ll @@ -4,17 +4,15 @@ ; defining %0 before it was read. This caused us to omit the ; movq -8(%rsp), %rdx -; CHECK: pushq %rax ; CHECK: #APP ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: movq %rcx, %rax -; CHECK-NEXT: movq %rax, (%rsp) -; CHECK-NEXT: movq (%rsp), %rdx +; CHECK-NEXT: movq %rax, -8(%rsp) +; CHECK-NEXT: movq -8(%rsp), %rdx ; CHECK-NEXT: #APP ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: movq %rdx, %rax -; CHECK-NEXT: movq %rdx, (%rsp) -; CHECK-NEXT: popq %rcx +; CHECK-NEXT: movq %rdx, -8(%rsp) ; CHECK-NEXT: ret define i64 @foo() { diff --git a/llvm/test/CodeGen/X86/win64_frame.ll b/llvm/test/CodeGen/X86/win64_frame.ll index 27d78dbe547..fd7156ed2fe 100644 --- a/llvm/test/CodeGen/X86/win64_frame.ll +++ b/llvm/test/CodeGen/X86/win64_frame.ll @@ -128,11 +128,9 @@ entry: ; CHECK: .seh_setframe 5, 0 ; CHECK: .seh_endprologue - %call = call i64 asm sideeffect "pushf\0A\09popq $0\0A", "=r,~{dirflag},~{fpsr},~{flags}"() - ; CHECK-NEXT: #APP + %call = call i64 @llvm.x86.flags.read.u64() ; CHECK-NEXT: pushfq ; CHECK-NEXT: popq %rax - ; CHECK: #NO_APP ret i64 %call ; CHECK-NEXT: popq %rbp @@ -187,5 +185,6 @@ define i64 @f10(i64* %foo, i64 %bar, i64 %baz) { } declare i8* @llvm.returnaddress(i32) nounwind readnone +declare i64 @llvm.x86.flags.read.u64() declare void @llvm.va_start(i8*) nounwind diff --git a/llvm/test/CodeGen/X86/x86-64-flags-intrinsics.ll b/llvm/test/CodeGen/X86/x86-64-flags-intrinsics.ll new file mode 100644 index 00000000000..4c5032aedbc --- /dev/null +++ b/llvm/test/CodeGen/X86/x86-64-flags-intrinsics.ll @@ -0,0 +1,37 @@ +; RUN: llc < %s | FileCheck %s +target triple = "x86_64-pc-win32" + +declare i64 @llvm.x86.flags.read.u64() +declare void @llvm.x86.flags.write.u64(i64) + +define i64 @read_flags() { +entry: + %flags = call i64 @llvm.x86.flags.read.u64() + ret i64 %flags +} + +; CHECK-LABEL: read_flags: +; CHECK: pushq %rbp +; CHECK: .seh_pushreg 5 +; CHECK: movq %rsp, %rbp +; CHECK: .seh_setframe 5, 0 +; CHECK: .seh_endprologue +; CHECK-NEXT: pushfq +; CHECK-NEXT: popq %rax +; CHECK-NEXT: popq %rbp + +define void @write_flags(i64 %arg) { +entry: + call void @llvm.x86.flags.write.u64(i64 %arg) + ret void +} + +; CHECK-LABEL: write_flags: +; CHECK: pushq %rbp +; CHECK: .seh_pushreg 5 +; CHECK: movq %rsp, %rbp +; CHECK: .seh_setframe 5, 0 +; CHECK: .seh_endprologue +; CHECK-NEXT: pushq %rcx +; CHECK-NEXT: popfq +; CHECK-NEXT: popq %rbp diff --git a/llvm/test/CodeGen/X86/x86-flags-intrinsics.ll b/llvm/test/CodeGen/X86/x86-flags-intrinsics.ll new file mode 100644 index 00000000000..325de7d5f1e --- /dev/null +++ b/llvm/test/CodeGen/X86/x86-flags-intrinsics.ll @@ -0,0 +1,31 @@ +; RUN: llc < %s | FileCheck %s +target triple = "i686-pc-win32" + +declare i32 @llvm.x86.flags.read.u32() +declare void @llvm.x86.flags.write.u32(i32) + +define i32 @read_flags() { +entry: + %flags = call i32 @llvm.x86.flags.read.u32() + ret i32 %flags +} + +; CHECK-LABEL: _read_flags: +; CHECK: pushl %ebp +; CHECK-NEXT: movl %esp, %ebp +; CHECK-NEXT: pushfl +; CHECK-NEXT: popl %eax +; CHECK-NEXT: popl %ebp + +define x86_fastcallcc void @write_flags(i32 inreg %arg) { +entry: + call void @llvm.x86.flags.write.u32(i32 %arg) + ret void +} + +; CHECK-LABEL: @write_flags@4: +; CHECK: pushl %ebp +; CHECK-NEXT: movl %esp, %ebp +; CHECK-NEXT: pushl %ecx +; CHECK-NEXT: popfl +; CHECK-NEXT: popl %ebp diff --git a/llvm/test/CodeGen/X86/x86-win64-shrink-wrapping.ll b/llvm/test/CodeGen/X86/x86-win64-shrink-wrapping.ll index 395de686d2e..5d9b2ba3267 100644 --- a/llvm/test/CodeGen/X86/x86-win64-shrink-wrapping.ll +++ b/llvm/test/CodeGen/X86/x86-win64-shrink-wrapping.ll @@ -11,10 +11,8 @@ target triple = "x86_64--windows-gnu" ; etc.) prior to the return and this is forbidden for Win64. ; CHECK-LABEL: loopInfoSaveOutsideLoop: ; CHECK: push -; CHECK: push ; CHECK-NOT: popq ; CHECK: popq -; CHECK: popq ; CHECK-NOT: popq ; CHECK-NEXT: retq define i32 @loopInfoSaveOutsideLoop(i32 %cond, i32 %N) #0 { @@ -57,7 +55,6 @@ if.end: ; preds = %if.else, %for.end ; ; Prologue code. ; Make sure we save the CSR used in the inline asm: rbx. -; CHECK: pushq %rbp ; CHECK: pushq %rbx ; ; DISABLE: testl %ecx, %ecx @@ -79,7 +76,6 @@ if.end: ; preds = %if.else, %for.end ; DISABLE: jmp [[EPILOG_BB:.LBB[0-9_]+]] ; ; ENABLE-NEXT: popq %rbx -; ENABLE-NEXT: popq %rbp ; ENABLE-NEXT: retq ; ; CHECK: [[ELSE_LABEL]]: # %if.else diff --git a/llvm/test/DebugInfo/COFF/asm.ll b/llvm/test/DebugInfo/COFF/asm.ll index f3e52df54be..b67100c87fd 100644 --- a/llvm/test/DebugInfo/COFF/asm.ll +++ b/llvm/test/DebugInfo/COFF/asm.ll @@ -130,15 +130,12 @@ ; X64-NEXT: .L{{.*}}:{{$}} ; X64-NEXT: [[START:.*]]:{{$}} ; X64: # BB -; X64: pushq %rbp -; X64-NEXT: subq $32, %rsp -; X64-NEXT: leaq 32(%rsp), %rbp +; X64: subq $40, %rsp ; X64-NEXT: [[ASM_LINE:.*]]:{{$}} ; X64: [[CALL_LINE:.*]]:{{$}} ; X64: callq g ; X64-NEXT: [[EPILOG_AND_RET:.*]]: -; X64: addq $32, %rsp -; X64-NEXT: popq %rbp +; X64: addq $40, %rsp ; X64-NEXT: ret ; X64-NEXT: [[END_OF_F:.*]]: ; @@ -225,22 +222,22 @@ ; OBJ64: ProcStart { ; OBJ64-NEXT: DisplayName: f ; OBJ64-NEXT: Section: f -; OBJ64-NEXT: CodeSize: 0x17 +; OBJ64-NEXT: CodeSize: 0xE ; OBJ64-NEXT: } ; OBJ64-NEXT: ProcEnd ; OBJ64-NEXT: ] ; OBJ64: FunctionLineTable [ ; OBJ64-NEXT: Name: f ; OBJ64-NEXT: Flags: 0x1 -; OBJ64-NEXT: CodeSize: 0x17 +; OBJ64-NEXT: CodeSize: 0xE ; OBJ64-NEXT: FilenameSegment [ ; OBJ64-NEXT: Filename: D:\asm.c ; OBJ64-NEXT: +0x0: 3 ; FIXME: An empty __asm stmt creates an extra entry. ; See PR18679 for the details. -; OBJ64-NEXT: +0xA: 4 -; OBJ64-NEXT: +0xC: 5 -; OBJ64-NEXT: +0x11: 6 +; OBJ64-NEXT: +0x4: 4 +; OBJ64-NEXT: +0x4: 5 +; OBJ64-NEXT: +0x9: 6 ; OBJ64-NEXT: ColStart: 0 ; OBJ64-NEXT: ColEnd: 0 ; OBJ64-NEXT: ColStart: 0 |