| ; RUN: llc < %s -mtriple=i686-windows | FileCheck %s -check-prefix=CHECK -check-prefix=NORMAL |
| ; RUN: llc < %s -mtriple=i686-windows -mattr=slow-two-mem-ops | FileCheck %s -check-prefix=CHECK -check-prefix=SLM |
| |
| declare void @foo(i32 %r) |
| |
| define void @test(i32 %a, i32 %b) optsize nounwind { |
| ; CHECK-LABEL: test: |
| ; CHECK: movl [[EAX:%e..]], (%esp) |
| ; CHECK-NEXT: pushl [[EAX]] |
| ; CHECK-NEXT: calll |
| ; CHECK-NEXT: addl $4, %esp |
| ; CHECK: nop |
| ; NORMAL: pushl (%esp) |
| ; SLM: movl (%esp), [[RELOAD:%e..]] |
| ; SLM-NEXT: pushl [[RELOAD]] |
| ; CHECK: calll |
| ; CHECK-NEXT: addl $8, %esp |
| %c = add i32 %a, %b |
| call void @foo(i32 %c) |
| call void asm sideeffect "nop", "~{ax},~{bx},~{cx},~{dx},~{bp},~{si},~{di}"() |
| call void @foo(i32 %c) |
| ret void |
| } |
| |
| define void @test_min(i32 %a, i32 %b) minsize nounwind { |
| ; CHECK-LABEL: test_min: |
| ; CHECK: movl [[EAX:%e..]], (%esp) |
| ; CHECK-NEXT: pushl [[EAX]] |
| ; CHECK-NEXT: calll |
| ; CHECK-NEXT: popl |
| ; CHECK: nop |
| ; CHECK: pushl (%esp) |
| ; CHECK: calll |
| ; CHECK-NEXT: popl |
| %c = add i32 %a, %b |
| call void @foo(i32 %c) |
| call void asm sideeffect "nop", "~{ax},~{bx},~{cx},~{dx},~{bp},~{si},~{di}"() |
| call void @foo(i32 %c) |
| ret void |
| } |