Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- declare void @printInt(i32)
- declare i8* @calloc(i32, i32)
- %arr = type { i32, [ 0 x i32 ] }*
- %arr2 = type { i32, [ 0 x %arr ] }*
- %arr3 = type { i32, [ 0 x %arr2 ] }*
- ; int main() {
- ; int[][][] arr = new int[1][2][3];
- ; printInt(arr[0][1][2]);
- ; printInt(arr.length);
- ; printInt(arr[0].length);
- ; printInt(arr[0][0].length);
- ; return 0;
- ; }
- define i32 @main() {
- entry:
- ; ----------------------------------------------------------------------
- ; int*** arr
- %c3 = call i8* @calloc(i32 50, i32 1)
- %a3 = bitcast i8* %c3 to %arr3
- ; ----------------------------------------------------------------------
- ; arr.length = 1
- %sp2 = getelementptr %arr3 %a3, i32 0, i32 0
- store i32 1, i32* %sp2
- ; ----------------------------------------------------------------------
- ; a[0] = new int[2]
- %c11 = call i8* @calloc(i32 50, i32 1)
- %a11 = bitcast i8* %c11 to %arr2
- %ap1 = getelementptr %arr3 %a3, i32 0, i32 1, i32 0
- store %arr2 %a11, %arr2* %ap1
- ; arr[0].length = 2
- %sp21 = getelementptr %arr3 %a3, i32 0, i32 1, i32 0
- %t0 = load %arr2* %sp21
- %t1 = getelementptr %arr2 %t0, i32 0, i32 0
- store i32 2, i32* %t1
- ; a[0][0] = new int[3]
- ; a[0][1] = new int[3]
- %c00 = call i8* @calloc(i32 50, i32 1)
- %c01 = call i8* @calloc(i32 50, i32 1)
- %a00 = bitcast i8* %c00 to %arr
- %a01 = bitcast i8* %c01 to %arr
- %p00 = getelementptr %arr2 %a11, i32 0, i32 1, i32 0
- %p01 = getelementptr %arr2 %a11, i32 0, i32 1, i32 0
- store %arr %a00, %arr* %p00
- store %arr %a01, %arr* %p01
- ; arr[0][0].length = 3
- %sp22 = getelementptr %arr3 %a3, i32 0, i32 1, i32 0
- %t00 = load %arr2* %sp22
- %t01 = getelementptr %arr2 %t00, i32 0, i32 1, i32 1
- %t02 = load %arr* %t01
- %t03 = getelementptr %arr %t02, i32 0, i32 0
- store i32 3, i32* %t03
- ; ----------------------------------------------------------------------
- ; arr[0][0] = 1
- ; arr[0][1] = 2
- ; ...
- ; arr[1][2] = 6
- ; call void @setElem(%arr3 %a3, i32 0, i32 0, i32 0, i32 1)
- ; call void @setElem(%arr2 %a2, i32 0, i32 1, i32 2)
- ; call void @setElem(%arr2 %a2, i32 0, i32 2, i32 3)
- ;
- ; call void @setElem(%arr2 %a2, i32 1, i32 0, i32 4)
- ; call void @setElem(%arr2 %a2, i32 1, i32 1, i32 5)
- ; call void @setElem(%arr2 %a2, i32 1, i32 2, i32 6)
- ; call void @setElem(%arr2 %a2, i32 0, i32 0, i32 2147483647)
- ; call void @setElem(%arr2 %a2, i32 0, i32 1, i32 2147483647)
- ; call void @setElem(%arr2 %a2, i32 0, i32 2, i32 2147483647)
- ;
- ; call void @setElem(%arr2 %a2, i32 1, i32 0, i32 2147483647)
- ; call void @setElem(%arr2 %a2, i32 1, i32 1, i32 2147483647)
- ; call void @setElem(%arr2 %a2, i32 1, i32 2, i32 2147483647)
- ; ----------------------------------------------------------------------
- ; print arr
- ; call void @printElem(%arr3 %a3, i32 0, i32 0, i32 0)
- ; call void @printElem(%arr2 %a2, i32 0, i32 1)
- ; call void @printElem(%arr2 %a2, i32 0, i32 2)
- ;
- ; call void @printElem(%arr2 %a2, i32 1, i32 0)
- ; call void @printElem(%arr2 %a2, i32 1, i32 1)
- ; call void @printElem(%arr2 %a2, i32 1, i32 2)
- ; ----------------------------------------------------------------------
- ; printInt(a.length)
- %l = call i32 @getLen(%arr3 %a3)
- call void @printInt(i32 %l)
- ; printInt(a[0].length)
- %l0 = call i32 @getLen2(%arr3 %a3)
- call void @printInt(i32 %l0)
- ; printInt(a[0][0].length)
- %l00 = call i32 @getLen3(%arr3 %a3)
- call void @printInt(i32 %l00)
- ret i32 0
- }
- ; return [i][j][k]
- define i32 @getElem (%arr3 %m, i32 %i, i32 %j, i32 %k) {
- %p1 = getelementptr %arr3 %m, i32 0, i32 1, i32 %i
- %p2 = load %arr2* %p1
- %p3 = getelementptr %arr2 %p2, i32 0, i32 1, i32 %j
- %p4 = load %arr* %p3
- %p5 = getelementptr %arr %p4, i32 0, i32 1, i32 %k
- %p6 = load i32* %p5
- ret i32 %p6
- }
- ; printInt(arr[i][j][k])
- define void @printElem (%arr3 %m, i32 %i, i32 %j, i32 %k) {
- %x = call i32 @getElem(%arr3 %m, i32 %i, i32 %j, i32 %k)
- call void @printInt(i32 %x)
- ret void
- }
- ; arr[i][j][k] = x
- define void @setElem (%arr3 %m, i32 %i, i32 %j, i32 %k, i32 %x) {
- %p1 = getelementptr %arr3 %m, i32 0, i32 1, i32 %i
- %p2 = load %arr2* %p1
- %p3 = getelementptr %arr2 %p2, i32 0, i32 1, i32 %j
- %p4 = load %arr* %p3
- %p5 = getelementptr %arr %p4, i32 0, i32 1, i32 %k
- store i32 %x, i32* %p5
- ret void
- }
- ; ----------------------------------------------------------------------
- ; Length
- ; arr.length
- define i32 @getLen (%arr3 %m) {
- %p1 = getelementptr %arr3 %m, i32 0, i32 0
- %p2 = load i32* %p1
- ret i32 %p2
- }
- ; arr[0].length
- define i32 @getLen2 (%arr3 %m) {
- %p1 = getelementptr %arr3 %m, i32 0, i32 1, i32 0
- %p2 = load %arr2* %p1
- %p3 = getelementptr %arr2 %p2, i32 0, i32 0
- %p4 = load i32* %p3
- ret i32 %p4
- }
- ; arr[0][0].length
- define i32 @getLen3 (%arr3 %m) {
- %p1 = getelementptr %arr3 %m, i32 0, i32 1, i32 0
- %p2 = load %arr2* %p1
- %p3 = getelementptr %arr2 %p2, i32 0, i32 0
- %p4 = load i32* %p3
- ret i32 %p4
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement