| OLD | NEW | 
|---|
| 1 ; Tests basics and corner cases of x86-32 sandboxing, using -Om1 in | 1 ; Tests basics and corner cases of x86-32 sandboxing, using -Om1 in | 
| 2 ; the hope that the output will remain stable.  When packing bundles, | 2 ; the hope that the output will remain stable.  When packing bundles, | 
| 3 ; we try to limit to a few instructions with well known sizes and | 3 ; we try to limit to a few instructions with well known sizes and | 
| 4 ; minimal use of registers and stack slots in the lowering sequence. | 4 ; minimal use of registers and stack slots in the lowering sequence. | 
| 5 | 5 | 
| 6 ; RUN: %p2i -i %s --assemble --disassemble --args -Om1 --verbose none \ | 6 ; RUN: %p2i -i %s --assemble --disassemble --args -Om1 --verbose none \ | 
| 7 ; RUN:   -ffunction-sections -sandbox | FileCheck %s | 7 ; RUN:   -ffunction-sections -sandbox | FileCheck %s | 
| 8 | 8 | 
| 9 declare void @call_target() | 9 declare void @call_target() | 
| 10 @global_byte = internal global [1 x i8] zeroinitializer | 10 @global_byte = internal global [1 x i8] zeroinitializer | 
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 223 ; CHECK-LABEL: bundle_lock_align_to_end_padding_2 | 223 ; CHECK-LABEL: bundle_lock_align_to_end_padding_2 | 
| 224 ; CHECK: call | 224 ; CHECK: call | 
| 225 ; CHECK-NEXT: 20: {{.*}} mov BYTE PTR | 225 ; CHECK-NEXT: 20: {{.*}} mov BYTE PTR | 
| 226 ; CHECK-NEXT: 27: {{.*}} mov WORD PTR | 226 ; CHECK-NEXT: 27: {{.*}} mov WORD PTR | 
| 227 ; CHECK-NEXT: 30: {{.*}} mov WORD PTR | 227 ; CHECK-NEXT: 30: {{.*}} mov WORD PTR | 
| 228 ; CHECK-NEXT: 39: {{.*}} mov [[REG:.*]],DWORD PTR [esp | 228 ; CHECK-NEXT: 39: {{.*}} mov [[REG:.*]],DWORD PTR [esp | 
| 229 ; CHECK-NEXT: 3d: {{.*}} nop | 229 ; CHECK-NEXT: 3d: {{.*}} nop | 
| 230 ; CHECK: 40: {{.*}} nop | 230 ; CHECK: 40: {{.*}} nop | 
| 231 ; CHECK: 5b: {{.*}} and [[REG]],0xffffffe0 | 231 ; CHECK: 5b: {{.*}} and [[REG]],0xffffffe0 | 
| 232 ; CHECK-NEXT: 5e: {{.*}} call [[REG]] | 232 ; CHECK-NEXT: 5e: {{.*}} call [[REG]] | 
|  | 233 | 
|  | 234 ; Stack adjustment state during an argument push sequence gets | 
|  | 235 ; properly checkpointed and restored during the two passes, as | 
|  | 236 ; observed by the stack adjustment for accessing stack-allocated | 
|  | 237 ; variables. | 
|  | 238 define void @checkpoint_restore_stack_adjustment(i32 %arg) { | 
|  | 239 entry: | 
|  | 240   call void @call_target() | 
|  | 241   ; bundle boundary | 
|  | 242   call void @checkpoint_restore_stack_adjustment(i32 %arg) | 
|  | 243   ret void | 
|  | 244 } | 
|  | 245 ; CHECK-LABEL: checkpoint_restore_stack_adjustment | 
|  | 246 ; CHECK: call | 
|  | 247 ; CHECK: sub esp,0x10 | 
|  | 248 ; The address of %arg should be [esp+0x20], not [esp+0x30]. | 
|  | 249 ; CHECK-NEXT: mov [[REG:.*]],DWORD PTR [esp+0x20] | 
|  | 250 ; CHECK-NEXT: mov DWORD PTR [esp],[[REG]] | 
|  | 251 ; CHECK: call | 
|  | 252 ; CHECK: add esp,0x10 | 
| OLD | NEW | 
|---|