From bc6037fb63a76d0e4f08e7bb2f63f8e7d5c8cdf0 Mon Sep 17 00:00:00 2001 From: advik Date: Thu, 13 Jun 2024 17:00:21 +0530 Subject: [PATCH 1/4] Added debug capabilities for lists --- src/libasr/codegen/asr_to_llvm.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/libasr/codegen/asr_to_llvm.cpp b/src/libasr/codegen/asr_to_llvm.cpp index bd267d88d5..02d0aa9f4f 100644 --- a/src/libasr/codegen/asr_to_llvm.cpp +++ b/src/libasr/codegen/asr_to_llvm.cpp @@ -3526,6 +3526,34 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor line = v->base.base.loc.first; column = 0; } + + if (ASR::is_a(*v->m_type)) { + std::string member_type_name; + uint32_t member_type_size, member_type_encoding; + + llvm::DIType *int_type = DBuilder->createBasicType("integer", 32, llvm::dwarf::DW_ATE_signed); + ASR::ttype_t *asr_member_type = ASRUtils::get_contained_type(v->m_type); + + get_type_debug_info(asr_member_type, member_type_name, + member_type_size, member_type_encoding); + llvm::DIType *member_type = DBuilder->createBasicType(member_type_name, member_type_size, member_type_encoding); + + llvm::DIType *member_pointer_type = DBuilder->createPointerType(member_type, 64, 0, 0, member_type_name+"*"); + llvm::DIType *list_type = DBuilder->createStructType( + debug_current_scope, "list", debug_Unit, line, 64+member_type_size, 0, llvm::DINode::FlagZero, nullptr, DBuilder->getOrCreateArray({ + DBuilder->createMemberType(debug_Unit, "i321", debug_Unit, line, 32, 0, 0, llvm::DINode::FlagZero, int_type), + DBuilder->createMemberType(debug_Unit, "i322", debug_Unit, line, 32, 32, 0, llvm::DINode::FlagZero, int_type), + DBuilder->createMemberType(debug_Unit, "member", debug_Unit, line, 64, 64, 0, llvm::DINode::FlagZero, member_pointer_type) + })); + llvm::DILocalVariable *debug_var = DBuilder->createParameterVariable(debug_current_scope, + v->m_name, ++debug_arg_count, debug_Unit, line, list_type, true); + DBuilder->insertDeclare(ptr, debug_var, DBuilder->createExpression(), + llvm::DILocation::get(debug_current_scope->getContext(), + line, 0, debug_current_scope), builder->GetInsertBlock()); + } else if (ASR::is_a(*v->m_type)) { + std::cout << "hi i am dictionary" << std::endl; + } else { + std::string type_name; uint32_t type_size, type_encoding; get_type_debug_info(v->m_type, type_name, type_size, @@ -3536,6 +3564,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor DBuilder->insertDeclare(ptr, debug_var, DBuilder->createExpression(), llvm::DILocation::get(debug_current_scope->getContext(), line, 0, debug_current_scope), builder->GetInsertBlock()); + } } if( ASR::is_a(*v->m_type) ) { From cd37acaa714de0145e0a90f75f5f435fb04a767d Mon Sep 17 00:00:00 2001 From: advik Date: Fri, 14 Jun 2024 17:51:07 +0530 Subject: [PATCH 2/4] Update tests --- tests/reference/asr-dictionary1-a105a36.json | 2 +- .../reference/asr-dictionary1-a105a36.stdout | 74 +------------------ .../asr-print_list_tuple_03-9de3736.json | 2 +- .../asr-print_list_tuple_03-9de3736.stdout | 29 -------- tests/reference/llvm_dbg-expr_01-9fc5f30.json | 2 +- .../reference/llvm_dbg-expr_01-9fc5f30.stdout | 22 +++--- ...ist_tuple-print_list_tuple_03-195fa9c.json | 2 +- ...t_tuple-print_list_tuple_03-195fa9c.stdout | 29 -------- 8 files changed, 16 insertions(+), 146 deletions(-) diff --git a/tests/reference/asr-dictionary1-a105a36.json b/tests/reference/asr-dictionary1-a105a36.json index 7191ef6371..991461787d 100644 --- a/tests/reference/asr-dictionary1-a105a36.json +++ b/tests/reference/asr-dictionary1-a105a36.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-dictionary1-a105a36.stdout", - "stdout_hash": "ac58817e3dc84de980d646cffeb63540c55bde9ca4229b8a7c58b77a", + "stdout_hash": "3ea42309cc8f2201f43bb2fdeb28a85feea890fe49db4063af5c46f8", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-dictionary1-a105a36.stdout b/tests/reference/asr-dictionary1-a105a36.stdout index 192d0350b7..8ae305005f 100644 --- a/tests/reference/asr-dictionary1-a105a36.stdout +++ b/tests/reference/asr-dictionary1-a105a36.stdout @@ -141,18 +141,6 @@ [] [] [(Assignment - (Var 3 x) - (DictConstant - [] - [] - (Dict - (Integer 4) - (Integer 4) - ) - ) - () - ) - (Assignment (Var 3 x) (DictConstant [(IntegerConstant 1 (Integer 4)) @@ -166,18 +154,6 @@ ) () ) - (Assignment - (Var 3 y) - (DictConstant - [] - [] - (Dict - (Character 1 -2 ()) - (Integer 4) - ) - ) - () - ) (Assignment (Var 3 y) (DictConstant @@ -310,18 +286,6 @@ [] [] [(Assignment - (Var 5 y) - (DictConstant - [] - [] - (Dict - (Character 1 -2 ()) - (Integer 4) - ) - ) - () - ) - (Assignment (Var 5 y) (DictConstant [(StringConstant @@ -426,18 +390,6 @@ [] [] [(Assignment - (Var 4 y) - (DictConstant - [] - [] - (Dict - (Character 1 -2 ()) - (Integer 4) - ) - ) - () - ) - (Assignment (Var 4 y) (DictConstant [(StringConstant @@ -542,18 +494,6 @@ [] [] [(Assignment - (Var 6 y) - (DictConstant - [] - [] - (Dict - (Character 1 -2 ()) - (Integer 4) - ) - ) - () - ) - (Assignment (Var 6 y) (DictConstant [(StringConstant @@ -634,19 +574,7 @@ ) [f] [] - [(Assignment - (Var 8 x) - (DictConstant - [] - [] - (Dict - (Integer 4) - (Integer 4) - ) - ) - () - ) - (SubroutineCall + [(SubroutineCall 2 f () [((Var 8 x))] diff --git a/tests/reference/asr-print_list_tuple_03-9de3736.json b/tests/reference/asr-print_list_tuple_03-9de3736.json index 5a107ca056..857cf48d38 100644 --- a/tests/reference/asr-print_list_tuple_03-9de3736.json +++ b/tests/reference/asr-print_list_tuple_03-9de3736.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-print_list_tuple_03-9de3736.stdout", - "stdout_hash": "9bc9712a40c386ddbd519614bb9ed900ebde24b5db7d0876f7e88e95", + "stdout_hash": "8962f3d49727ceb8f899acc2382f5fb6d24b16506a154ccf907400f5", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-print_list_tuple_03-9de3736.stdout b/tests/reference/asr-print_list_tuple_03-9de3736.stdout index dfd164741e..9e0bc45dec 100644 --- a/tests/reference/asr-print_list_tuple_03-9de3736.stdout +++ b/tests/reference/asr-print_list_tuple_03-9de3736.stdout @@ -110,21 +110,6 @@ [] [] [(Assignment - (Var 3 x) - (DictConstant - [] - [] - (Dict - (Integer 4) - (Tuple - [(Integer 4) - (Integer 4)] - ) - ) - ) - () - ) - (Assignment (Var 3 x) (DictConstant [(IntegerConstant 1 (Integer 4)) @@ -155,20 +140,6 @@ ) () ) - (Assignment - (Var 3 y) - (DictConstant - [] - [] - (Dict - (Integer 4) - (List - (Integer 4) - ) - ) - ) - () - ) (Assignment (Var 3 y) (DictConstant diff --git a/tests/reference/llvm_dbg-expr_01-9fc5f30.json b/tests/reference/llvm_dbg-expr_01-9fc5f30.json index 649301a2b9..eaf44451a7 100644 --- a/tests/reference/llvm_dbg-expr_01-9fc5f30.json +++ b/tests/reference/llvm_dbg-expr_01-9fc5f30.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "llvm_dbg-expr_01-9fc5f30.stdout", - "stdout_hash": "70643017f0ad204393988f111369cdd921c1c297149078182707cb54", + "stdout_hash": "05769e73cdff14fdd425e63737873d8843446992063a8c0715e1b8ba", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/llvm_dbg-expr_01-9fc5f30.stdout b/tests/reference/llvm_dbg-expr_01-9fc5f30.stdout index 405da5aad9..125e50e227 100644 --- a/tests/reference/llvm_dbg-expr_01-9fc5f30.stdout +++ b/tests/reference/llvm_dbg-expr_01-9fc5f30.stdout @@ -5,7 +5,7 @@ source_filename = "LFortran" @1 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 @2 = private unnamed_addr constant [5 x i8] c"%d%s\00", align 1 -define void @__module___main_____main__global_stmts() !dbg !3 { +define void @__module___main_____main__global_stmts() !dbg !2 { .entry: call void @__module___main___main0(), !dbg !6 br label %return, !dbg !6 @@ -33,7 +33,7 @@ return: ; preds = %.entry ret void, !dbg !21 } -; Function Attrs: nounwind readnone speculatable willreturn +; Function Attrs: nofree nosync nounwind readnone speculatable willreturn declare void @llvm.dbg.declare(metadata, metadata, metadata) #0 declare void @_lfortran_printf(i8*, ...) @@ -47,18 +47,18 @@ define i32 @main(i32 %0, i8** %1) !dbg !22 { declare void @_lpython_call_initial_functions(i32, i8**) -attributes #0 = { nounwind readnone speculatable willreturn } +attributes #0 = { nofree nosync nounwind readnone speculatable willreturn } !llvm.dbg.cu = !{!0} -!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "LPython Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) +!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "LPython Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) !1 = !DIFile(filename: "tests/expr_01.py", directory: ".") -!2 = !{} -!3 = distinct !DISubprogram(name: "__main__global_stmts", scope: !1, file: !1, line: 1, type: !4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) -!4 = !DISubroutineType(types: !5) -!5 = !{null} -!6 = !DILocation(line: 9, column: 1, scope: !3) -!7 = distinct !DISubprogram(name: "main0", scope: !1, file: !1, line: 1, type: !4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) +!2 = distinct !DISubprogram(name: "__main__global_stmts", scope: !1, file: !1, line: 1, type: !3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !5) +!3 = !DISubroutineType(types: !4) +!4 = !{null} +!5 = !{} +!6 = !DILocation(line: 9, column: 1, scope: !2) +!7 = distinct !DISubprogram(name: "main0", scope: !1, file: !1, line: 1, type: !3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !5) !8 = !DILocation(line: 1, column: 1, scope: !7) !9 = !DILocalVariable(name: "x", arg: 1, scope: !7, file: !1, line: 2, type: !10) !10 = !DIBasicType(name: "integer", size: 32, encoding: DW_ATE_signed) @@ -73,7 +73,7 @@ attributes #0 = { nounwind readnone speculatable willreturn } !19 = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float) !20 = !DILocation(line: 5, scope: !7) !21 = !DILocation(line: 6, column: 5, scope: !7) -!22 = distinct !DISubprogram(name: "main_program", scope: !1, file: !1, line: 1, type: !23, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) +!22 = distinct !DISubprogram(name: "main_program", scope: !1, file: !1, line: 1, type: !23, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !5) !23 = !DISubroutineType(types: !24) !24 = !{!10} !25 = !DILocation(line: 1, column: 1, scope: !22) diff --git a/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.json b/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.json index 7734699e6f..c2fa5807d7 100644 --- a/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.json +++ b/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout", - "stdout_hash": "edb9d31c77ac27a72de4454275693936ef43c07263a2da687e16da5c", + "stdout_hash": "f63197ac9c1a649cfb2d3a3ef6f6672964ad753593afc68ce6d567e9", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout b/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout index 98feee42a5..aa210f8619 100644 --- a/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout +++ b/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout @@ -144,21 +144,6 @@ [] [] [(Assignment - (Var 3 x) - (DictConstant - [] - [] - (Dict - (Integer 4) - (Tuple - [(Integer 4) - (Integer 4)] - ) - ) - ) - () - ) - (Assignment (Var 3 x) (DictConstant [(IntegerConstant 1 (Integer 4)) @@ -189,20 +174,6 @@ ) () ) - (Assignment - (Var 3 y) - (DictConstant - [] - [] - (Dict - (Integer 4) - (List - (Integer 4) - ) - ) - ) - () - ) (Assignment (Var 3 y) (DictConstant From c3e974483b3d25e6653e981218c3614aa36d4fb1 Mon Sep 17 00:00:00 2001 From: advik Date: Mon, 17 Jun 2024 22:28:51 +0530 Subject: [PATCH 3/4] Update references --- tests/reference/asr-dictionary1-a105a36.json | 2 +- .../reference/asr-dictionary1-a105a36.stdout | 74 ++++++++++++++++++- .../asr-print_list_tuple_03-9de3736.json | 2 +- .../asr-print_list_tuple_03-9de3736.stdout | 29 ++++++++ tests/reference/llvm_dbg-expr_01-9fc5f30.json | 2 +- .../reference/llvm_dbg-expr_01-9fc5f30.stdout | 22 +++--- ...ist_tuple-print_list_tuple_03-195fa9c.json | 2 +- ...t_tuple-print_list_tuple_03-195fa9c.stdout | 29 ++++++++ 8 files changed, 146 insertions(+), 16 deletions(-) diff --git a/tests/reference/asr-dictionary1-a105a36.json b/tests/reference/asr-dictionary1-a105a36.json index 991461787d..7191ef6371 100644 --- a/tests/reference/asr-dictionary1-a105a36.json +++ b/tests/reference/asr-dictionary1-a105a36.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-dictionary1-a105a36.stdout", - "stdout_hash": "3ea42309cc8f2201f43bb2fdeb28a85feea890fe49db4063af5c46f8", + "stdout_hash": "ac58817e3dc84de980d646cffeb63540c55bde9ca4229b8a7c58b77a", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-dictionary1-a105a36.stdout b/tests/reference/asr-dictionary1-a105a36.stdout index 8ae305005f..192d0350b7 100644 --- a/tests/reference/asr-dictionary1-a105a36.stdout +++ b/tests/reference/asr-dictionary1-a105a36.stdout @@ -141,6 +141,18 @@ [] [] [(Assignment + (Var 3 x) + (DictConstant + [] + [] + (Dict + (Integer 4) + (Integer 4) + ) + ) + () + ) + (Assignment (Var 3 x) (DictConstant [(IntegerConstant 1 (Integer 4)) @@ -154,6 +166,18 @@ ) () ) + (Assignment + (Var 3 y) + (DictConstant + [] + [] + (Dict + (Character 1 -2 ()) + (Integer 4) + ) + ) + () + ) (Assignment (Var 3 y) (DictConstant @@ -286,6 +310,18 @@ [] [] [(Assignment + (Var 5 y) + (DictConstant + [] + [] + (Dict + (Character 1 -2 ()) + (Integer 4) + ) + ) + () + ) + (Assignment (Var 5 y) (DictConstant [(StringConstant @@ -390,6 +426,18 @@ [] [] [(Assignment + (Var 4 y) + (DictConstant + [] + [] + (Dict + (Character 1 -2 ()) + (Integer 4) + ) + ) + () + ) + (Assignment (Var 4 y) (DictConstant [(StringConstant @@ -494,6 +542,18 @@ [] [] [(Assignment + (Var 6 y) + (DictConstant + [] + [] + (Dict + (Character 1 -2 ()) + (Integer 4) + ) + ) + () + ) + (Assignment (Var 6 y) (DictConstant [(StringConstant @@ -574,7 +634,19 @@ ) [f] [] - [(SubroutineCall + [(Assignment + (Var 8 x) + (DictConstant + [] + [] + (Dict + (Integer 4) + (Integer 4) + ) + ) + () + ) + (SubroutineCall 2 f () [((Var 8 x))] diff --git a/tests/reference/asr-print_list_tuple_03-9de3736.json b/tests/reference/asr-print_list_tuple_03-9de3736.json index 857cf48d38..5a107ca056 100644 --- a/tests/reference/asr-print_list_tuple_03-9de3736.json +++ b/tests/reference/asr-print_list_tuple_03-9de3736.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-print_list_tuple_03-9de3736.stdout", - "stdout_hash": "8962f3d49727ceb8f899acc2382f5fb6d24b16506a154ccf907400f5", + "stdout_hash": "9bc9712a40c386ddbd519614bb9ed900ebde24b5db7d0876f7e88e95", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-print_list_tuple_03-9de3736.stdout b/tests/reference/asr-print_list_tuple_03-9de3736.stdout index 9e0bc45dec..dfd164741e 100644 --- a/tests/reference/asr-print_list_tuple_03-9de3736.stdout +++ b/tests/reference/asr-print_list_tuple_03-9de3736.stdout @@ -110,6 +110,21 @@ [] [] [(Assignment + (Var 3 x) + (DictConstant + [] + [] + (Dict + (Integer 4) + (Tuple + [(Integer 4) + (Integer 4)] + ) + ) + ) + () + ) + (Assignment (Var 3 x) (DictConstant [(IntegerConstant 1 (Integer 4)) @@ -140,6 +155,20 @@ ) () ) + (Assignment + (Var 3 y) + (DictConstant + [] + [] + (Dict + (Integer 4) + (List + (Integer 4) + ) + ) + ) + () + ) (Assignment (Var 3 y) (DictConstant diff --git a/tests/reference/llvm_dbg-expr_01-9fc5f30.json b/tests/reference/llvm_dbg-expr_01-9fc5f30.json index eaf44451a7..649301a2b9 100644 --- a/tests/reference/llvm_dbg-expr_01-9fc5f30.json +++ b/tests/reference/llvm_dbg-expr_01-9fc5f30.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "llvm_dbg-expr_01-9fc5f30.stdout", - "stdout_hash": "05769e73cdff14fdd425e63737873d8843446992063a8c0715e1b8ba", + "stdout_hash": "70643017f0ad204393988f111369cdd921c1c297149078182707cb54", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/llvm_dbg-expr_01-9fc5f30.stdout b/tests/reference/llvm_dbg-expr_01-9fc5f30.stdout index 125e50e227..405da5aad9 100644 --- a/tests/reference/llvm_dbg-expr_01-9fc5f30.stdout +++ b/tests/reference/llvm_dbg-expr_01-9fc5f30.stdout @@ -5,7 +5,7 @@ source_filename = "LFortran" @1 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 @2 = private unnamed_addr constant [5 x i8] c"%d%s\00", align 1 -define void @__module___main_____main__global_stmts() !dbg !2 { +define void @__module___main_____main__global_stmts() !dbg !3 { .entry: call void @__module___main___main0(), !dbg !6 br label %return, !dbg !6 @@ -33,7 +33,7 @@ return: ; preds = %.entry ret void, !dbg !21 } -; Function Attrs: nofree nosync nounwind readnone speculatable willreturn +; Function Attrs: nounwind readnone speculatable willreturn declare void @llvm.dbg.declare(metadata, metadata, metadata) #0 declare void @_lfortran_printf(i8*, ...) @@ -47,18 +47,18 @@ define i32 @main(i32 %0, i8** %1) !dbg !22 { declare void @_lpython_call_initial_functions(i32, i8**) -attributes #0 = { nofree nosync nounwind readnone speculatable willreturn } +attributes #0 = { nounwind readnone speculatable willreturn } !llvm.dbg.cu = !{!0} -!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "LPython Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) +!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "LPython Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) !1 = !DIFile(filename: "tests/expr_01.py", directory: ".") -!2 = distinct !DISubprogram(name: "__main__global_stmts", scope: !1, file: !1, line: 1, type: !3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !5) -!3 = !DISubroutineType(types: !4) -!4 = !{null} -!5 = !{} -!6 = !DILocation(line: 9, column: 1, scope: !2) -!7 = distinct !DISubprogram(name: "main0", scope: !1, file: !1, line: 1, type: !3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !5) +!2 = !{} +!3 = distinct !DISubprogram(name: "__main__global_stmts", scope: !1, file: !1, line: 1, type: !4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) +!4 = !DISubroutineType(types: !5) +!5 = !{null} +!6 = !DILocation(line: 9, column: 1, scope: !3) +!7 = distinct !DISubprogram(name: "main0", scope: !1, file: !1, line: 1, type: !4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) !8 = !DILocation(line: 1, column: 1, scope: !7) !9 = !DILocalVariable(name: "x", arg: 1, scope: !7, file: !1, line: 2, type: !10) !10 = !DIBasicType(name: "integer", size: 32, encoding: DW_ATE_signed) @@ -73,7 +73,7 @@ attributes #0 = { nofree nosync nounwind readnone speculatable willreturn } !19 = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float) !20 = !DILocation(line: 5, scope: !7) !21 = !DILocation(line: 6, column: 5, scope: !7) -!22 = distinct !DISubprogram(name: "main_program", scope: !1, file: !1, line: 1, type: !23, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !5) +!22 = distinct !DISubprogram(name: "main_program", scope: !1, file: !1, line: 1, type: !23, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) !23 = !DISubroutineType(types: !24) !24 = !{!10} !25 = !DILocation(line: 1, column: 1, scope: !22) diff --git a/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.json b/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.json index c2fa5807d7..7734699e6f 100644 --- a/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.json +++ b/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout", - "stdout_hash": "f63197ac9c1a649cfb2d3a3ef6f6672964ad753593afc68ce6d567e9", + "stdout_hash": "edb9d31c77ac27a72de4454275693936ef43c07263a2da687e16da5c", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout b/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout index aa210f8619..98feee42a5 100644 --- a/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout +++ b/tests/reference/pass_print_list_tuple-print_list_tuple_03-195fa9c.stdout @@ -144,6 +144,21 @@ [] [] [(Assignment + (Var 3 x) + (DictConstant + [] + [] + (Dict + (Integer 4) + (Tuple + [(Integer 4) + (Integer 4)] + ) + ) + ) + () + ) + (Assignment (Var 3 x) (DictConstant [(IntegerConstant 1 (Integer 4)) @@ -174,6 +189,20 @@ ) () ) + (Assignment + (Var 3 y) + (DictConstant + [] + [] + (Dict + (Integer 4) + (List + (Integer 4) + ) + ) + ) + () + ) (Assignment (Var 3 y) (DictConstant From 94cc406ea23121128e9005d4fb0b7189e596981f Mon Sep 17 00:00:00 2001 From: advik Date: Wed, 19 Jun 2024 12:18:28 +0530 Subject: [PATCH 4/4] Add debug capabilities to sets --- src/libasr/codegen/asr_to_llvm.cpp | 36 ++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/libasr/codegen/asr_to_llvm.cpp b/src/libasr/codegen/asr_to_llvm.cpp index 02d0aa9f4f..a2d6aee72c 100644 --- a/src/libasr/codegen/asr_to_llvm.cpp +++ b/src/libasr/codegen/asr_to_llvm.cpp @@ -3541,8 +3541,8 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor llvm::DIType *member_pointer_type = DBuilder->createPointerType(member_type, 64, 0, 0, member_type_name+"*"); llvm::DIType *list_type = DBuilder->createStructType( debug_current_scope, "list", debug_Unit, line, 64+member_type_size, 0, llvm::DINode::FlagZero, nullptr, DBuilder->getOrCreateArray({ - DBuilder->createMemberType(debug_Unit, "i321", debug_Unit, line, 32, 0, 0, llvm::DINode::FlagZero, int_type), - DBuilder->createMemberType(debug_Unit, "i322", debug_Unit, line, 32, 32, 0, llvm::DINode::FlagZero, int_type), + DBuilder->createMemberType(debug_Unit, "i32", debug_Unit, line, 32, 0, 0, llvm::DINode::FlagZero, int_type), + DBuilder->createMemberType(debug_Unit, "i32", debug_Unit, line, 32, 32, 0, llvm::DINode::FlagZero, int_type), DBuilder->createMemberType(debug_Unit, "member", debug_Unit, line, 64, 64, 0, llvm::DINode::FlagZero, member_pointer_type) })); llvm::DILocalVariable *debug_var = DBuilder->createParameterVariable(debug_current_scope, @@ -3550,8 +3550,36 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor DBuilder->insertDeclare(ptr, debug_var, DBuilder->createExpression(), llvm::DILocation::get(debug_current_scope->getContext(), line, 0, debug_current_scope), builder->GetInsertBlock()); - } else if (ASR::is_a(*v->m_type)) { - std::cout << "hi i am dictionary" << std::endl; + } else if (ASR::is_a(*v->m_type)) { + std::string member_type_name; + uint32_t member_type_size, member_type_encoding; + + llvm::DIType *int_type = DBuilder->createBasicType("integer", 32, llvm::dwarf::DW_ATE_signed); + llvm::DIType *int_8_ptr_type = DBuilder->createPointerType( + DBuilder->createBasicType("char", 8, llvm::dwarf::DW_ATE_unsigned_char), 64, 0, 0, "i8*"); + ASR::ttype_t *asr_member_type = ASRUtils::get_contained_type(v->m_type); + + get_type_debug_info(asr_member_type, member_type_name, + member_type_size, member_type_encoding); + llvm::DIType *member_type = DBuilder->createBasicType(member_type_name, member_type_size, member_type_encoding); + + llvm::DIType *member_pointer_type = DBuilder->createPointerType(member_type, 64, 0, 0, member_type_name+"*"); + llvm::DIType *list_type = DBuilder->createStructType( + debug_current_scope, "list", debug_Unit, line, 64+member_type_size, 0, llvm::DINode::FlagZero, nullptr, DBuilder->getOrCreateArray({ + DBuilder->createMemberType(debug_Unit, "i32", debug_Unit, line, 32, 0, 0, llvm::DINode::FlagZero, int_type), + DBuilder->createMemberType(debug_Unit, "i32", debug_Unit, line, 32, 32, 0, llvm::DINode::FlagZero, int_type), + DBuilder->createMemberType(debug_Unit, "member", debug_Unit, line, 64, 64, 0, llvm::DINode::FlagZero, member_pointer_type) + })); + llvm::DIType *set_type = DBuilder->createStructType( + debug_current_scope, "list", debug_Unit, line, 64+member_type_size+32+64, 0, llvm::DINode::FlagZero, nullptr, DBuilder->getOrCreateArray({ + DBuilder->createMemberType(debug_Unit, "i32", debug_Unit, line, 32, 0, 0, llvm::DINode::FlagZero, int_type), + DBuilder->createMemberType(debug_Unit, "list", debug_Unit, line, 128, 32, 0, llvm::DINode::FlagZero, list_type), + DBuilder->createMemberType(debug_Unit, "i8*", debug_Unit, line, 64, 160, 0, llvm::DINode::FlagZero, int_8_ptr_type)})); + llvm::DILocalVariable *debug_var = DBuilder->createParameterVariable(debug_current_scope, + v->m_name, ++debug_arg_count, debug_Unit, line, set_type, true); + DBuilder->insertDeclare(ptr, debug_var, DBuilder->createExpression(), + llvm::DILocation::get(debug_current_scope->getContext(), + line, 0, debug_current_scope), builder->GetInsertBlock()); } else { std::string type_name;