27 lines
636 B
LLVM
27 lines
636 B
LLVM
%disju = type { i64, i8* }
|
|
%var1 = type { i64, i64* }
|
|
%var2 = type { i64, i8** }
|
|
|
|
@gint = global i64 42
|
|
@v1 = global %var1 { i64 0, i64* @gint }
|
|
@v2 = global %var2 { i64 1, i8** null }
|
|
@gstr = global [14 x i8] c"hello, world!\00"
|
|
|
|
|
|
define i64 @main(i64 %argc, i8** %argv) {
|
|
%p0 = alloca i64
|
|
%p1 = getelementptr %var2, %var2* @v2, i32 0, i32 0
|
|
store i64 5, i64* %p1
|
|
%vb = bitcast %var2* @v2 to %disju*
|
|
call void @foo(%disju* %vb)
|
|
%n1 = load i64, i64* %p1
|
|
ret i64 %n1
|
|
}
|
|
|
|
define void @foo(%disju* %pu) {
|
|
%p1 = getelementptr %disju, %disju* %pu, i32 0, i32 0
|
|
store i64 6, i64* %p1
|
|
%n1 = load i64, i64* %p1
|
|
ret void
|
|
}
|
|
|