| OLD | NEW |
| 1 ; This checks to ensure that Subzero aligns spill slots. | 1 ; This checks to ensure that Subzero aligns spill slots. |
| 2 | 2 |
| 3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s | 3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s |
| 4 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s | 4 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s |
| 5 | 5 |
| 6 ; The location of the stack slot for a variable is inferred from the | 6 ; The location of the stack slot for a variable is inferred from the |
| 7 ; return sequence. | 7 ; return sequence. |
| 8 | 8 |
| 9 ; In this file, "global" refers to a variable with a live range across | 9 ; In this file, "global" refers to a variable with a live range across |
| 10 ; multiple basic blocks (not an LLVM global variable) and "local" | 10 ; multiple basic blocks (not an LLVM global variable) and "local" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 ; CHECK-LABEL: align_local_vector | 33 ; CHECK-LABEL: align_local_vector |
| 34 ; CHECK: movups xmm0,XMMWORD PTR [esp] | 34 ; CHECK: movups xmm0,XMMWORD PTR [esp] |
| 35 ; CHECK-NEXT: add esp,0x1c | 35 ; CHECK-NEXT: add esp,0x1c |
| 36 ; CHECK-NEXT: ret | 36 ; CHECK-NEXT: ret |
| 37 } | 37 } |
| 38 | 38 |
| 39 declare void @ForceXmmSpills() | 39 declare void @ForceXmmSpills() |
| 40 | 40 |
| 41 define <4 x i32> @align_global_vector_ebp_based(i32 %arg) { | 41 define <4 x i32> @align_global_vector_ebp_based(i32 %arg) { |
| 42 entry: | 42 entry: |
| 43 br label %eblock ; Disable alloca optimization |
| 44 eblock: |
| 43 %alloc = alloca i8, i32 1, align 1 | 45 %alloc = alloca i8, i32 1, align 1 |
| 44 %vec.global = insertelement <4 x i32> undef, i32 %arg, i32 0 | 46 %vec.global = insertelement <4 x i32> undef, i32 %arg, i32 0 |
| 45 br label %block | 47 br label %block |
| 46 block: | 48 block: |
| 47 call void @ForceXmmSpillsAndUseAlloca(i8* %alloc) | 49 call void @ForceXmmSpillsAndUseAlloca(i8* %alloc) |
| 48 ret <4 x i32> %vec.global | 50 ret <4 x i32> %vec.global |
| 49 ; CHECK-LABEL: align_global_vector_ebp_based | 51 ; CHECK-LABEL: align_global_vector_ebp_based |
| 50 ; CHECK: movups xmm0,XMMWORD PTR [ebp-0x18] | 52 ; CHECK: movups xmm0,XMMWORD PTR [ebp-0x18] |
| 51 ; CHECK-NEXT: mov esp,ebp | 53 ; CHECK-NEXT: mov esp,ebp |
| 52 ; CHECK-NEXT: pop ebp | 54 ; CHECK-NEXT: pop ebp |
| 53 ; CHECK: ret | 55 ; CHECK: ret |
| 54 } | 56 } |
| 55 | 57 |
| 56 define <4 x i32> @align_local_vector_ebp_based(i32 %arg) { | 58 define <4 x i32> @align_local_vector_ebp_based(i32 %arg) { |
| 57 entry: | 59 entry: |
| 60 br label %eblock ; Disable alloca optimization |
| 61 eblock: |
| 58 %alloc = alloca i8, i32 1, align 1 | 62 %alloc = alloca i8, i32 1, align 1 |
| 59 %vec.local = insertelement <4 x i32> undef, i32 %arg, i32 0 | 63 %vec.local = insertelement <4 x i32> undef, i32 %arg, i32 0 |
| 60 call void @ForceXmmSpillsAndUseAlloca(i8* %alloc) | 64 call void @ForceXmmSpillsAndUseAlloca(i8* %alloc) |
| 61 ret <4 x i32> %vec.local | 65 ret <4 x i32> %vec.local |
| 62 ; CHECK-LABEL: align_local_vector_ebp_based | 66 ; CHECK-LABEL: align_local_vector_ebp_based |
| 63 ; CHECK: movups xmm0,XMMWORD PTR [ebp-0x18] | 67 ; CHECK: movups xmm0,XMMWORD PTR [ebp-0x18] |
| 64 ; CHECK-NEXT: mov esp,ebp | 68 ; CHECK-NEXT: mov esp,ebp |
| 65 ; CHECK-NEXT: pop ebp | 69 ; CHECK-NEXT: pop ebp |
| 66 ; CHECK: ret | 70 ; CHECK: ret |
| 67 } | 71 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 78 ; CHECK-LABEL: align_local_vector_and_global_float | 82 ; CHECK-LABEL: align_local_vector_and_global_float |
| 79 ; CHECK: cvtsi2ss xmm0,eax | 83 ; CHECK: cvtsi2ss xmm0,eax |
| 80 ; CHECK-NEXT: movss DWORD PTR [esp+{{0xc|0x1c}}],xmm0 | 84 ; CHECK-NEXT: movss DWORD PTR [esp+{{0xc|0x1c}}],xmm0 |
| 81 ; CHECK: movups xmm0,XMMWORD PTR [{{esp|esp\+0x10}}] | 85 ; CHECK: movups xmm0,XMMWORD PTR [{{esp|esp\+0x10}}] |
| 82 ; CHECK-NEXT: add esp,0x2c | 86 ; CHECK-NEXT: add esp,0x2c |
| 83 ; CHECK-NEXT: ret | 87 ; CHECK-NEXT: ret |
| 84 } | 88 } |
| 85 | 89 |
| 86 declare void @ForceXmmSpillsAndUseAlloca(i8*) | 90 declare void @ForceXmmSpillsAndUseAlloca(i8*) |
| 87 declare void @ForceXmmSpillsAndUseFloat(float) | 91 declare void @ForceXmmSpillsAndUseFloat(float) |
| OLD | NEW |