| ; NOTE: Assertions have been autogenerated by utils/update_llubi_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llubi --verbose < %s 2>&1 | FileCheck %s |
| |
| target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64" |
| |
| %struct = type {i8, i32, i8} |
| |
| define void @callee(ptr byval(%struct) %p) { |
| %concrete_zero1 = load i8, ptr %p |
| %concrete_zero2 = load i8, ptr %p |
| %p_padding1 = getelementptr i8, ptr %p, i64 1 |
| %def1_padding1 = load i8, ptr %p_padding1 |
| %def2_padding1 = load i8, ptr %p_padding1 |
| %p_padding2 = getelementptr i8, ptr %p, i64 9 |
| %def1_padding2 = load i8, ptr %p_padding2 |
| %def2_padding2 = load i8, ptr %p_padding2 |
| ret void |
| } |
| |
| @g = global [12 x i8] zeroinitializer |
| |
| define void @main() { |
| %p_padding1 = getelementptr i8, ptr @g, i64 1 |
| store i8 10, ptr %p_padding1 |
| %p_padding2 = getelementptr i8, ptr @g, i64 9 |
| store i8 12, ptr %p_padding2 |
| call void @callee(ptr byval(%struct) @g) |
| ret void |
| } |
| ; CHECK: Entering function: main |
| ; CHECK-NEXT: %p_padding1 = getelementptr i8, ptr @g, i64 1 => ptr 0x9 [@g + 1] |
| ; CHECK-NEXT: store i8 10, ptr %p_padding1, align 1 |
| ; CHECK-NEXT: %p_padding2 = getelementptr i8, ptr @g, i64 9 => ptr 0x11 [@g + 9] |
| ; CHECK-NEXT: store i8 12, ptr %p_padding2, align 1 |
| ; CHECK-NEXT: Entering function: callee |
| ; CHECK-NEXT: ptr %p = ptr 0x18 [p] |
| ; CHECK-NEXT: %concrete_zero1 = load i8, ptr %p, align 1 => i8 0 |
| ; CHECK-NEXT: %concrete_zero2 = load i8, ptr %p, align 1 => i8 0 |
| ; CHECK-NEXT: %p_padding1 = getelementptr i8, ptr %p, i64 1 => ptr 0x19 [p + 1] |
| ; CHECK-NEXT: %def1_padding1 = load i8, ptr %p_padding1, align 1 => i8 10 |
| ; CHECK-NEXT: %def2_padding1 = load i8, ptr %p_padding1, align 1 => i8 10 |
| ; CHECK-NEXT: %p_padding2 = getelementptr i8, ptr %p, i64 9 => ptr 0x21 [p + 9] |
| ; CHECK-NEXT: %def1_padding2 = load i8, ptr %p_padding2, align 1 => i8 12 |
| ; CHECK-NEXT: %def2_padding2 = load i8, ptr %p_padding2, align 1 => i8 12 |
| ; CHECK-NEXT: ret void |
| ; CHECK-NEXT: Exiting function: callee |
| ; CHECK-NEXT: call void @callee(ptr byval(%struct) @g) |
| ; CHECK-NEXT: ret void |
| ; CHECK-NEXT: Exiting function: main |