| ; Check that lli respects alignment on global variables. |
| ; |
| ; Returns ((uint32_t)&B & 0x7) - A + C. Variables A and C have byte-alignment, |
| ; and are intended to increase the chance of misalignment, but don't contribute |
| ; to the result, since they have the same initial value. |
| ; |
| ; A failure may indicate a problem with alignment handling in the JIT linker or |
| ; JIT memory manager. |
| ; |
| ; RUN: %lli %s |
| |
| @A = internal global i8 1, align 1 |
| @B = global i64 1, align 8 |
| @C = internal global i8 1, align 1 |
| |
| define i32 @main(i32 %argc, i8** %argv) { |
| entry: |
| %0 = ptrtoint i8* @B to i32 |
| %1 = and i32 %0, 7 |
| %2 = load i8, i8* @A |
| %3 = zext i8 %2 to i32 |
| %4 = add i32 %1, %3 |
| %5 = load i8, i8* @C |
| %6 = zext i8 %5 to i32 |
| %7 = sub i32 %4, %6 |
| ret i32 %7 |
| } |