| OLD | NEW |
| 1 ; This tries to be a comprehensive test of i64 operations, in | 1 ; This tries to be a comprehensive test of i64 operations, in |
| 2 ; particular the patterns for lowering i64 operations into constituent | 2 ; particular the patterns for lowering i64 operations into constituent |
| 3 ; i32 operations on x86-32. | 3 ; i32 operations on x86-32. |
| 4 | 4 |
| 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ | 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
| 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 8 | 8 |
| 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ | 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 82 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 83 ; OPTM1: mov DWORD PTR [esp+0x4] | 83 ; OPTM1: mov DWORD PTR [esp+0x4] |
| 84 ; OPTM1: mov DWORD PTR [esp] | 84 ; OPTM1: mov DWORD PTR [esp] |
| 85 ; OPTM1: mov DWORD PTR [esp+0x8],0x7b | 85 ; OPTM1: mov DWORD PTR [esp+0x8],0x7b |
| 86 ; OPTM1: mov DWORD PTR [esp+0x10] | 86 ; OPTM1: mov DWORD PTR [esp+0x10] |
| 87 ; OPTM1: mov DWORD PTR [esp+0xc] | 87 ; OPTM1: mov DWORD PTR [esp+0xc] |
| 88 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 88 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 89 | 89 |
| 90 ; ARM32-LABEL: pass64BitArg | 90 ; ARM32-LABEL: pass64BitArg |
| 91 ; ARM32: str {{.*}}, [sp] | 91 ; ARM32: str {{.*}}, [sp] |
| 92 ; ARM32: movw r2, #123 | 92 ; ARM32: mov r2, #123 |
| 93 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 93 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 94 ; ARM32: str {{.*}}, [sp] | 94 ; ARM32: str {{.*}}, [sp] |
| 95 ; ARM32: {{mov|ldr}} r0 | 95 ; ARM32: {{mov|ldr}} r0 |
| 96 ; ARM32: {{mov|ldr}} r1 | 96 ; ARM32: {{mov|ldr}} r1 |
| 97 ; ARM32: movw r2, #123 | 97 ; ARM32: mov r2, #123 |
| 98 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 98 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 99 ; ARM32: str {{.*}}, [sp] | 99 ; ARM32: str {{.*}}, [sp] |
| 100 ; ARM32: {{mov|ldr}} r0 | 100 ; ARM32: {{mov|ldr}} r0 |
| 101 ; ARM32: {{mov|ldr}} r1 | 101 ; ARM32: {{mov|ldr}} r1 |
| 102 ; ARM32: movw r2, #123 | 102 ; ARM32: mov r2, #123 |
| 103 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 103 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 104 | 104 |
| 105 | 105 |
| 106 declare i32 @ignore64BitArgNoInline(i64, i32, i64) | 106 declare i32 @ignore64BitArgNoInline(i64, i32, i64) |
| 107 | 107 |
| 108 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { | 108 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { |
| 109 entry: | 109 entry: |
| 110 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672
5256) | 110 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672
5256) |
| 111 ret i32 %call | 111 ret i32 %call |
| 112 } | 112 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 135 | 135 |
| 136 ; ARM32-LABEL: pass64BitConstArg | 136 ; ARM32-LABEL: pass64BitConstArg |
| 137 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef | 137 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef |
| 138 ; ARM32: movt [[REG1]], {{.*}} ; 0xdead | 138 ; ARM32: movt [[REG1]], {{.*}} ; 0xdead |
| 139 ; ARM32: movw [[REG2:r.*]], {{.*}} ; 0x5678 | 139 ; ARM32: movw [[REG2:r.*]], {{.*}} ; 0x5678 |
| 140 ; ARM32: movt [[REG2]], {{.*}} ; 0x1234 | 140 ; ARM32: movt [[REG2]], {{.*}} ; 0x1234 |
| 141 ; ARM32: str [[REG1]], [sp, #4] | 141 ; ARM32: str [[REG1]], [sp, #4] |
| 142 ; ARM32: str [[REG2]], [sp] | 142 ; ARM32: str [[REG2]], [sp] |
| 143 ; ARM32: {{mov|ldr}} r0 | 143 ; ARM32: {{mov|ldr}} r0 |
| 144 ; ARM32: {{mov|ldr}} r1 | 144 ; ARM32: {{mov|ldr}} r1 |
| 145 ; ARM32: movw r2, #123 | 145 ; ARM32: mov r2, #123 |
| 146 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 146 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 147 | 147 |
| 148 define internal i32 @pass64BitUndefArg() { | 148 define internal i32 @pass64BitUndefArg() { |
| 149 entry: | 149 entry: |
| 150 %call = call i32 @ignore64BitArgNoInline(i64 0, i32 123, i64 undef) | 150 %call = call i32 @ignore64BitArgNoInline(i64 0, i32 123, i64 undef) |
| 151 ret i32 %call | 151 ret i32 %call |
| 152 } | 152 } |
| 153 ; CHECK-LABEL: pass64BitUndefArg | 153 ; CHECK-LABEL: pass64BitUndefArg |
| 154 ; CHECK: sub esp | 154 ; CHECK: sub esp |
| 155 ; CHECK: mov DWORD PTR{{.*}},0x7b | 155 ; CHECK: mov DWORD PTR{{.*}},0x7b |
| 156 ; CHECK: mov DWORD PTR{{.*}},0x0 | 156 ; CHECK: mov DWORD PTR{{.*}},0x0 |
| 157 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 157 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 158 ; OPTM1-LABEL: pass64BitUndefArg | 158 ; OPTM1-LABEL: pass64BitUndefArg |
| 159 ; OPTM1: sub esp | 159 ; OPTM1: sub esp |
| 160 ; OPTM1: mov DWORD PTR{{.*}},0x7b | 160 ; OPTM1: mov DWORD PTR{{.*}},0x7b |
| 161 ; OPTM1: mov DWORD PTR{{.*}},0x0 | 161 ; OPTM1: mov DWORD PTR{{.*}},0x0 |
| 162 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 162 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 163 ; ARM32-LABEL: pass64BitUndefArg | 163 ; ARM32-LABEL: pass64BitUndefArg |
| 164 ; ARM32: sub sp | 164 ; ARM32: sub sp |
| 165 ; ARM32: movw {{.*}}, #0 | 165 ; ARM32: mov {{.*}}, #0 |
| 166 ; ARM32: str | 166 ; ARM32: str |
| 167 ; ARM32: movw {{.*}}, #123 | 167 ; ARM32: mov {{.*}}, #123 |
| 168 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 168 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
| 169 | 169 |
| 170 define internal i64 @return64BitArg(i64 %padding, i64 %a) { | 170 define internal i64 @return64BitArg(i64 %padding, i64 %a) { |
| 171 entry: | 171 entry: |
| 172 ret i64 %a | 172 ret i64 %a |
| 173 } | 173 } |
| 174 ; CHECK-LABEL: return64BitArg | 174 ; CHECK-LABEL: return64BitArg |
| 175 ; CHECK: mov {{.*}},DWORD PTR [esp+0xc] | 175 ; CHECK: mov {{.*}},DWORD PTR [esp+0xc] |
| 176 ; CHECK: mov {{.*}},DWORD PTR [esp+0x10] | 176 ; CHECK: mov {{.*}},DWORD PTR [esp+0x10] |
| 177 ; | 177 ; |
| (...skipping 1668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1846 ; CHECK-LABEL: phi64Undef | 1846 ; CHECK-LABEL: phi64Undef |
| 1847 ; CHECK: mov {{.*}},0x0 | 1847 ; CHECK: mov {{.*}},0x0 |
| 1848 ; CHECK: mov {{.*}},0x0 | 1848 ; CHECK: mov {{.*}},0x0 |
| 1849 ; OPTM1-LABEL: phi64Undef | 1849 ; OPTM1-LABEL: phi64Undef |
| 1850 ; OPTM1: mov {{.*}},0x0 | 1850 ; OPTM1: mov {{.*}},0x0 |
| 1851 ; OPTM1: mov {{.*}},0x0 | 1851 ; OPTM1: mov {{.*}},0x0 |
| 1852 ; ARM32-LABEL: phi64Undef | 1852 ; ARM32-LABEL: phi64Undef |
| 1853 ; ARM32: mov {{.*}} #0 | 1853 ; ARM32: mov {{.*}} #0 |
| 1854 ; ARM32: mov {{.*}} #0 | 1854 ; ARM32: mov {{.*}} #0 |
| 1855 | 1855 |
| OLD | NEW |