diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/test/CodeGen/X86/win32_sret.ll | 34 | 
1 files changed, 20 insertions, 14 deletions
diff --git a/llvm/test/CodeGen/X86/win32_sret.ll b/llvm/test/CodeGen/X86/win32_sret.ll index 002cac88245..527355f85e6 100644 --- a/llvm/test/CodeGen/X86/win32_sret.ll +++ b/llvm/test/CodeGen/X86/win32_sret.ll @@ -13,15 +13,15 @@  define void @sret1(i8* sret %x) nounwind {  entry: -; WIN32:      sret1 +; WIN32-LABEL:      _sret1:  ; WIN32:      movb $42, (%eax)  ; WIN32-NOT:  popl %eax  ; WIN32:    {{ret$}} -; MINGW_X86:  sret1 +; MINGW_X86-LABEL:  _sret1:  ; MINGW_X86:  ret $4 -; LINUX:      sret1 +; LINUX-LABEL:      sret1:  ; LINUX:      ret $4    store i8 42, i8* %x, align 4 @@ -30,15 +30,15 @@ entry:  define void @sret2(i8* sret %x, i8 %y) nounwind {  entry: -; WIN32:      sret2 +; WIN32-LABEL:      _sret2:  ; WIN32:      movb {{.*}}, (%eax)  ; WIN32-NOT:  popl %eax  ; WIN32:    {{ret$}} -; MINGW_X86:  sret2 +; MINGW_X86-LABEL:  _sret2:  ; MINGW_X86:  ret $4 -; LINUX:      sret2 +; LINUX-LABEL:      sret2:  ; LINUX:      ret $4    store i8 %y, i8* %x @@ -47,16 +47,16 @@ entry:  define void @sret3(i8* sret %x, i8* %y) nounwind {  entry: -; WIN32:      sret3 +; WIN32-LABEL:      _sret3:  ; WIN32:      movb $42, (%eax)  ; WIN32-NOT:  movb $13, (%eax)  ; WIN32-NOT:  popl %eax  ; WIN32:    {{ret$}} -; MINGW_X86:  sret3 +; MINGW_X86-LABEL:  _sret3:  ; MINGW_X86:  ret $4 -; LINUX:      sret3 +; LINUX-LABEL:      sret3:  ; LINUX:      ret $4    store i8 42, i8* %x @@ -69,15 +69,15 @@ entry:  define void @sret4(%struct.S4* noalias sret %agg.result) {  entry: -; WIN32:     sret4 +; WIN32-LABEL:     _sret4:  ; WIN32:     movl $42, (%eax)  ; WIN32-NOT: popl %eax  ; WIN32:   {{ret$}} -; MINGW_X86: sret4 +; MINGW_X86-LABEL: _sret4:  ; MINGW_X86: ret $4 -; LINUX:     sret4 +; LINUX-LABEL:     sret4:  ; LINUX:     ret $4    %x = getelementptr inbounds %struct.S4* %agg.result, i32 0, i32 0 @@ -96,7 +96,9 @@ entry:    %x = getelementptr inbounds %struct.S5* %agg.result, i32 0, i32 0    store i32 42, i32* %x, align 4    ret void -; WIN32:     {{^}}"?foo@C5@@QAE?AUS5@@XZ": +; WIN32-LABEL:     {{^}}"?foo@C5@@QAE?AUS5@@XZ": +; MINGW_X86-LABEL: {{^}}"?foo@C5@@QAE?AUS5@@XZ": +; LINUX-LABEL:     {{^}}"?foo@C5@@QAE?AUS5@@XZ":  ; The address of the return structure is passed as an implicit parameter.  ; In the -O0 build, %eax is spilled at the beginning of the function, hence we @@ -111,7 +113,10 @@ entry:    %c = alloca %class.C5, align 1    %s = alloca %struct.S5, align 4    call x86_thiscallcc void @"\01?foo@C5@@QAE?AUS5@@XZ"(%struct.S5* sret %s, %class.C5* %c) -; WIN32:      {{^}}_call_foo5: +; WIN32-LABEL:      {{^}}_call_foo5: +; MINGW_X86-LABEL:  {{^}}_call_foo5: +; LINUX-LABEL:      {{^}}call_foo5: +  ; Load the address of the result and put it onto stack  ; (through %ecx in the -O0 build). @@ -130,6 +135,7 @@ entry:  define void @test6_f(%struct.test6* %x) nounwind {  ; WIN32-LABEL: _test6_f:  ; MINGW_X86-LABEL: _test6_f: +; LINUX-LABEL: test6_f:  ; The %x argument is moved to %ecx. It will be the this pointer.  ; WIN32: movl    8(%ebp), %ecx  | 

