From 14090f0225ef81d96a52954e87de9b22e11de48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= <ondrej@certik.us> Date: Sun, 17 Oct 2021 10:01:49 -0600 Subject: [PATCH 1/6] rtlib: Implement cpu_time() --- src/runtime/impure/lfortran_intrinsic_math.f90 | 13 +++++++++++++ src/runtime/impure/lfortran_intrinsics.c | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/src/runtime/impure/lfortran_intrinsic_math.f90 b/src/runtime/impure/lfortran_intrinsic_math.f90 index e246b4e3e9..e3a4f97fc7 100644 --- a/src/runtime/impure/lfortran_intrinsic_math.f90 +++ b/src/runtime/impure/lfortran_intrinsic_math.f90 @@ -990,4 +990,17 @@ end interface r = c_zatanh(x) end function +! cpu_time --------------------------------------------------------------------- + +pure subroutine cpu_time(t) +real(dp), intent(out) :: t +interface + pure subroutine c_cpu_time(t) bind(c, name="_lfortran_cpu_time") + import :: c_double + real(c_double), intent(out) :: t + end subroutine +end interface +call c_cpu_time(t) +end subroutine + end module diff --git a/src/runtime/impure/lfortran_intrinsics.c b/src/runtime/impure/lfortran_intrinsics.c index 8a346a5be9..c3f0351461 100644 --- a/src/runtime/impure/lfortran_intrinsics.c +++ b/src/runtime/impure/lfortran_intrinsics.c @@ -566,6 +566,8 @@ LFORTRAN_API void _lfortran_string_init(int size_plus_one, char *s) { s[size] = '\0'; } +// bit ------------------------------------------------------------------------ + LFORTRAN_API int32_t _lfortran_iand32(int32_t x, int32_t y) { return x & y; } @@ -605,3 +607,10 @@ LFORTRAN_API int32_t _lfortran_btest32(int32_t i, int pos) { LFORTRAN_API int64_t _lfortran_btest64(int64_t i, int pos) { return i & (1LL << pos); } + +// cpu_time ------------------------------------------------------------------- + +LFORTRAN_API void _lfortran_cpu_time(double *t) { + // TODO: + *t = 5.0; +} -- GitLab From 771e54e4fbe77360ec08efba78d0409bcefbe94c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= <ondrej@certik.us> Date: Sun, 17 Oct 2021 10:14:47 -0600 Subject: [PATCH 2/6] Add a test for cpu_time --- integration_tests/cpu_time_01.f90 | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 integration_tests/cpu_time_01.f90 diff --git a/integration_tests/cpu_time_01.f90 b/integration_tests/cpu_time_01.f90 new file mode 100644 index 0000000000..0e304e76cd --- /dev/null +++ b/integration_tests/cpu_time_01.f90 @@ -0,0 +1,9 @@ +program cpu_time_01 +use iso_fortran_env, only: dp=>real64 +implicit none +real(dp) :: t1, t2 +call cpu_time(t1) +print *, "Some computation" +call cpu_time(t2) +print *, "Total time: ", t2-t1 +end program -- GitLab From 5e1934e9a1aedc5d4f78c80de3bb1ed5a9c2c9e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= <ondrej@certik.us> Date: Sun, 17 Oct 2021 10:42:20 -0600 Subject: [PATCH 3/6] ASR: handle cpu_time() --- src/lfortran/semantics/ast_body_visitor.cpp | 2 +- src/lfortran/semantics/ast_common_visitor.h | 5 +++-- src/lfortran/semantics/comptime_eval.h | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/lfortran/semantics/ast_body_visitor.cpp b/src/lfortran/semantics/ast_body_visitor.cpp index 9c5358c277..9e00842ec6 100644 --- a/src/lfortran/semantics/ast_body_visitor.cpp +++ b/src/lfortran/semantics/ast_body_visitor.cpp @@ -782,7 +782,7 @@ public: original_sym = current_scope->resolve_symbol(sub_name); } if (!original_sym) { - throw SemanticError("Subroutine '" + sub_name + "' not declared", x.base.base.loc); + original_sym = resolve_intrinsic_function(x.base.base.loc, sub_name); } Vec<ASR::expr_t*> args = visit_expr_list(x.m_args, x.n_args); Vec<ASR::expr_t*> args_with_mdt; diff --git a/src/lfortran/semantics/ast_common_visitor.h b/src/lfortran/semantics/ast_common_visitor.h index f1e639ce6e..161d405d02 100644 --- a/src/lfortran/semantics/ast_common_visitor.h +++ b/src/lfortran/semantics/ast_common_visitor.h @@ -1113,10 +1113,11 @@ public: + "' not found in the module '" + module_name + "'", loc); } else if (! (ASR::is_a<ASR::GenericProcedure_t>(*t) - || ASR::is_a<ASR::Function_t>(*t))) { + || ASR::is_a<ASR::Function_t>(*t) + || ASR::is_a<ASR::Subroutine_t>(*t))) { throw SemanticError("The symbol '" + remote_sym + "' found in the module '" + module_name + "', " - + "but it is not a function or a generic function.", + + "but it is not a function, subroutine or a generic procedure.", loc); } char *fn_name = ASRUtils::symbol_name(t); diff --git a/src/lfortran/semantics/comptime_eval.h b/src/lfortran/semantics/comptime_eval.h index 7658bb0038..29b977ee6b 100644 --- a/src/lfortran/semantics/comptime_eval.h +++ b/src/lfortran/semantics/comptime_eval.h @@ -104,6 +104,9 @@ struct IntrinsicProcedures { {"minval", {m_array, ¬_implemented, false}}, {"maxval", {m_array, ¬_implemented, false}}, {"sum", {m_array, ¬_implemented, false}}, + + // Subroutines + {"cpu_time", {m_math, ¬_implemented, false}}, }; } -- GitLab From d6e134c23fc88bf543816c1b604a6d22b5b6911d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= <ondrej@certik.us> Date: Sun, 17 Oct 2021 10:54:22 -0600 Subject: [PATCH 4/6] LLVM: handle intrinsic subroutines --- src/lfortran/codegen/asr_to_llvm.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lfortran/codegen/asr_to_llvm.cpp b/src/lfortran/codegen/asr_to_llvm.cpp index 360f5c01d5..87b404b9c5 100644 --- a/src/lfortran/codegen/asr_to_llvm.cpp +++ b/src/lfortran/codegen/asr_to_llvm.cpp @@ -1834,7 +1834,8 @@ public: void visit_Subroutine(const ASR::Subroutine_t &x) { if (x.m_abi != ASR::abiType::Source && - x.m_abi != ASR::abiType::Interactive) { + x.m_abi != ASR::abiType::Interactive && + x.m_abi != ASR::abiType::Intrinsic) { return; } instantiate_subroutine(x); @@ -3690,6 +3691,8 @@ public: h = get_hash((ASR::asr_t*)s); } else if (s->m_abi == ASR::abiType::BindC) { h = get_hash((ASR::asr_t*)s); + } else if (s->m_abi == ASR::abiType::Intrinsic) { + h = get_hash((ASR::asr_t*)s); } else { throw CodeGenError("ABI type not implemented yet in SubroutineCall."); } -- GitLab From 16cae1884d906811191b948b9b688829462f3586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= <ondrej@certik.us> Date: Sun, 17 Oct 2021 11:05:19 -0600 Subject: [PATCH 5/6] Update tests --- tests/reference/asr-intrinsics_04-524ec3a.json | 2 +- tests/reference/asr-intrinsics_04-524ec3a.stdout | 2 +- tests/reference/llvm-associate_04-014f05c.json | 2 +- tests/reference/llvm-associate_04-014f05c.stdout | 11 +++++++++++ tests/reference/llvm-intrinsics_02-89bd643.json | 2 +- tests/reference/llvm-intrinsics_02-89bd643.stdout | 11 +++++++++++ tests/reference/llvm-intrinsics_03-234fe2e.json | 2 +- tests/reference/llvm-intrinsics_03-234fe2e.stdout | 11 +++++++++++ tests/reference/llvm-intrinsics_04-a26f62c.json | 2 +- tests/reference/llvm-intrinsics_04-a26f62c.stdout | 11 +++++++++++ tests/reference/llvm-intrinsics_05-d3cf5f5.json | 2 +- tests/reference/llvm-intrinsics_05-d3cf5f5.stdout | 11 +++++++++++ tests/reference/llvm-intrinsics_06-91045e5.json | 2 +- tests/reference/llvm-intrinsics_06-91045e5.stdout | 11 +++++++++++ tests/reference/llvm-sin_03-aebf02d.json | 2 +- tests/reference/llvm-sin_03-aebf02d.stdout | 11 +++++++++++ 16 files changed, 86 insertions(+), 9 deletions(-) diff --git a/tests/reference/asr-intrinsics_04-524ec3a.json b/tests/reference/asr-intrinsics_04-524ec3a.json index 91aa23762a..cb69c82cdf 100644 --- a/tests/reference/asr-intrinsics_04-524ec3a.json +++ b/tests/reference/asr-intrinsics_04-524ec3a.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-intrinsics_04-524ec3a.stdout", - "stdout_hash": "2442cf6efbe45feb8d3e31bd50dbd4d5f3399e37a7726fff0a892a1f", + "stdout_hash": "efae586a6c772e958b0f999dfc2445003d0e9b6fc0037d7129d19cfb", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-intrinsics_04-524ec3a.stdout b/tests/reference/asr-intrinsics_04-524ec3a.stdout index a127a7b347..f361430b95 100644 --- a/tests/reference/asr-intrinsics_04-524ec3a.stdout +++ b/tests/reference/asr-intrinsics_04-524ec3a.stdout @@ -1 +1 @@ -(TranslationUnit (SymbolTable 1 {intrinsics_04: (Program (SymbolTable 2 {abs: (ExternalSymbol 2 abs 6 abs lfortran_intrinsic_math [] abs Private), abs@dabs: (ExternalSymbol 2 abs@dabs 6 dabs lfortran_intrinsic_math [] dabs Private), dp: (ExternalSymbol 2 dp 4 real64 lfortran_intrinsic_iso_fortran_env [] real64 Public), real: (ExternalSymbol 2 real 164 real lfortran_intrinsic_array [] real Private), tan: (ExternalSymbol 2 tan 6 tan lfortran_intrinsic_math [] tan Private), tan@dtan: (ExternalSymbol 2 tan@dtan 6 dtan lfortran_intrinsic_math [] dtan Private), tan@ztan: (ExternalSymbol 2 tan@ztan 6 ztan lfortran_intrinsic_math [] ztan Private), x: (Variable 2 x Local () () Default (Real 8 []) Source Public Required .false.), z: (Variable 2 z Local () () Default (Complex 8 []) Source Public Required .false.)}) intrinsics_04 [iso_fortran_env] [(= (Var 2 x) (ConstantReal 1.500000 (Real 8 [])) ()) (= (Var 2 x) (FunctionCall 2 tan@dtan 2 tan [(Var 2 x)] [] (Real 8 []) () ()) ()) (Print () [(Var 2 x)]) (If (Compare (FunctionCall 2 abs@dabs 2 abs [(BinOp (Var 2 x) Sub (ConstantReal 14.101420 (Real 8 [])) (Real 8 []) () ())] [] (Real 8 []) () ()) Gt (ConstantReal 0.000000 (Real 8 [])) (Logical 4 []) () ()) [(ErrorStop ())] []) (= (Var 2 z) (ComplexConstructor (ConstantReal 1.500000 (Real 8 [])) (ConstantReal 3.500000 (Real 8 [])) (Complex 8 []) (ConstantComplex 1.500000 3.500000 (Complex 8 []))) ()) (= (Var 2 z) (FunctionCall 2 tan@ztan 2 tan [(Var 2 z)] [] (Complex 8 []) () ()) ()) (Print () [(Var 2 z)]) (If (Compare (FunctionCall 2 abs@dabs 2 abs [(BinOp (ImplicitCast (Var 2 z) ComplexToReal (Real 8 []) ()) Sub (ConstantReal 0.000258 (Real 8 [])) (Real 8 []) () ())] [] (Real 8 []) () ()) Gt (ConstantReal 0.000000 (Real 8 [])) (Logical 4 []) () ()) [(ErrorStop ())] [])]), iso_c_binding: (IntrinsicModule lfortran_intrinsic_iso_c_binding), iso_fortran_env: (IntrinsicModule lfortran_intrinsic_iso_fortran_env), lfortran_intrinsic_array: (IntrinsicModule lfortran_intrinsic_array), lfortran_intrinsic_math: (IntrinsicModule lfortran_intrinsic_math)}) []) +(TranslationUnit (SymbolTable 1 {intrinsics_04: (Program (SymbolTable 2 {abs: (ExternalSymbol 2 abs 6 abs lfortran_intrinsic_math [] abs Private), abs@dabs: (ExternalSymbol 2 abs@dabs 6 dabs lfortran_intrinsic_math [] dabs Private), dp: (ExternalSymbol 2 dp 4 real64 lfortran_intrinsic_iso_fortran_env [] real64 Public), real: (ExternalSymbol 2 real 166 real lfortran_intrinsic_array [] real Private), tan: (ExternalSymbol 2 tan 6 tan lfortran_intrinsic_math [] tan Private), tan@dtan: (ExternalSymbol 2 tan@dtan 6 dtan lfortran_intrinsic_math [] dtan Private), tan@ztan: (ExternalSymbol 2 tan@ztan 6 ztan lfortran_intrinsic_math [] ztan Private), x: (Variable 2 x Local () () Default (Real 8 []) Source Public Required .false.), z: (Variable 2 z Local () () Default (Complex 8 []) Source Public Required .false.)}) intrinsics_04 [iso_fortran_env] [(= (Var 2 x) (ConstantReal 1.500000 (Real 8 [])) ()) (= (Var 2 x) (FunctionCall 2 tan@dtan 2 tan [(Var 2 x)] [] (Real 8 []) () ()) ()) (Print () [(Var 2 x)]) (If (Compare (FunctionCall 2 abs@dabs 2 abs [(BinOp (Var 2 x) Sub (ConstantReal 14.101420 (Real 8 [])) (Real 8 []) () ())] [] (Real 8 []) () ()) Gt (ConstantReal 0.000000 (Real 8 [])) (Logical 4 []) () ()) [(ErrorStop ())] []) (= (Var 2 z) (ComplexConstructor (ConstantReal 1.500000 (Real 8 [])) (ConstantReal 3.500000 (Real 8 [])) (Complex 8 []) (ConstantComplex 1.500000 3.500000 (Complex 8 []))) ()) (= (Var 2 z) (FunctionCall 2 tan@ztan 2 tan [(Var 2 z)] [] (Complex 8 []) () ()) ()) (Print () [(Var 2 z)]) (If (Compare (FunctionCall 2 abs@dabs 2 abs [(BinOp (ImplicitCast (Var 2 z) ComplexToReal (Real 8 []) ()) Sub (ConstantReal 0.000258 (Real 8 [])) (Real 8 []) () ())] [] (Real 8 []) () ()) Gt (ConstantReal 0.000000 (Real 8 [])) (Logical 4 []) () ()) [(ErrorStop ())] [])]), iso_c_binding: (IntrinsicModule lfortran_intrinsic_iso_c_binding), iso_fortran_env: (IntrinsicModule lfortran_intrinsic_iso_fortran_env), lfortran_intrinsic_array: (IntrinsicModule lfortran_intrinsic_array), lfortran_intrinsic_math: (IntrinsicModule lfortran_intrinsic_math)}) []) diff --git a/tests/reference/llvm-associate_04-014f05c.json b/tests/reference/llvm-associate_04-014f05c.json index e6cd8958b4..40d99e4940 100644 --- a/tests/reference/llvm-associate_04-014f05c.json +++ b/tests/reference/llvm-associate_04-014f05c.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "llvm-associate_04-014f05c.stdout", - "stdout_hash": "aaf1cb376b3601a012b55c2863eaa77e44a838eab65ebd8d5b43b1e8", + "stdout_hash": "feac76e35714b3f375b93df5e840d8667d70e11264c9dcc2166e3832", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/llvm-associate_04-014f05c.stdout b/tests/reference/llvm-associate_04-014f05c.stdout index 9b7c5b56ed..06e953b190 100644 --- a/tests/reference/llvm-associate_04-014f05c.stdout +++ b/tests/reference/llvm-associate_04-014f05c.stdout @@ -12,6 +12,17 @@ declare i8* @__module_lfortran_intrinsic_array_char(i32*) declare void @__module_lfortran_intrinsic_iso_c_binding_c_f_pointer(%c_ptr*, i32*) +define void @__module_lfortran_intrinsic_math_cpu_time(double* %t) { +.entry: + call void @_lfortran_cpu_time(double* %t) + br label %return + +return: ; preds = %.entry + ret void +} + +declare void @_lfortran_cpu_time(double*) + define float @__module_lfortran_intrinsic_math_scos(float* %x) { .entry: %r = alloca float, align 4 diff --git a/tests/reference/llvm-intrinsics_02-89bd643.json b/tests/reference/llvm-intrinsics_02-89bd643.json index b7a89a795b..04d1c20a43 100644 --- a/tests/reference/llvm-intrinsics_02-89bd643.json +++ b/tests/reference/llvm-intrinsics_02-89bd643.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "llvm-intrinsics_02-89bd643.stdout", - "stdout_hash": "e3df4c9d0a39dfca431b67eddddb185101fcc4883b881e7472c1e6e7", + "stdout_hash": "3a58e8a827331a89573aed813ed7d415725533098c26925b0f723730", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/llvm-intrinsics_02-89bd643.stdout b/tests/reference/llvm-intrinsics_02-89bd643.stdout index 8c6a56415b..40e56ac4cf 100644 --- a/tests/reference/llvm-intrinsics_02-89bd643.stdout +++ b/tests/reference/llvm-intrinsics_02-89bd643.stdout @@ -10,6 +10,17 @@ declare i8* @__module_lfortran_intrinsic_array_char(i32*) declare void @__module_lfortran_intrinsic_iso_c_binding_c_f_pointer(%c_ptr*, i32*) +define void @__module_lfortran_intrinsic_math_cpu_time(double* %t) { +.entry: + call void @_lfortran_cpu_time(double* %t) + br label %return + +return: ; preds = %.entry + ret void +} + +declare void @_lfortran_cpu_time(double*) + define float @__module_lfortran_intrinsic_math_ssin(float* %x) { .entry: %r = alloca float, align 4 diff --git a/tests/reference/llvm-intrinsics_03-234fe2e.json b/tests/reference/llvm-intrinsics_03-234fe2e.json index f082cad200..a1b723997f 100644 --- a/tests/reference/llvm-intrinsics_03-234fe2e.json +++ b/tests/reference/llvm-intrinsics_03-234fe2e.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "llvm-intrinsics_03-234fe2e.stdout", - "stdout_hash": "76089330d7a4ba40fa98cad34058efc166352284762cd6ebfc4fee5b", + "stdout_hash": "55a4acd321092a8245e93030624519100161198250d38028413995dc", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/llvm-intrinsics_03-234fe2e.stdout b/tests/reference/llvm-intrinsics_03-234fe2e.stdout index f2fbd8a23e..1226bbfeed 100644 --- a/tests/reference/llvm-intrinsics_03-234fe2e.stdout +++ b/tests/reference/llvm-intrinsics_03-234fe2e.stdout @@ -10,6 +10,17 @@ declare i8* @__module_lfortran_intrinsic_array_char(i32*) declare void @__module_lfortran_intrinsic_iso_c_binding_c_f_pointer(%c_ptr*, i32*) +define void @__module_lfortran_intrinsic_math_cpu_time(double* %t) { +.entry: + call void @_lfortran_cpu_time(double* %t) + br label %return + +return: ; preds = %.entry + ret void +} + +declare void @_lfortran_cpu_time(double*) + define float @__module_lfortran_intrinsic_math_scos(float* %x) { .entry: %r = alloca float, align 4 diff --git a/tests/reference/llvm-intrinsics_04-a26f62c.json b/tests/reference/llvm-intrinsics_04-a26f62c.json index 131cd307e2..6df48dbafb 100644 --- a/tests/reference/llvm-intrinsics_04-a26f62c.json +++ b/tests/reference/llvm-intrinsics_04-a26f62c.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "llvm-intrinsics_04-a26f62c.stdout", - "stdout_hash": "946cf096d8bb4885452726ed78af7bb325d7b87e1c0c264272a11628", + "stdout_hash": "0e72bce2401bbc4775d2090f0a7d925cd05dec47667d28d8726a0c18", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/llvm-intrinsics_04-a26f62c.stdout b/tests/reference/llvm-intrinsics_04-a26f62c.stdout index 30da195172..6a7526f1ac 100644 --- a/tests/reference/llvm-intrinsics_04-a26f62c.stdout +++ b/tests/reference/llvm-intrinsics_04-a26f62c.stdout @@ -14,6 +14,17 @@ declare i8* @__module_lfortran_intrinsic_array_char(i32*) declare void @__module_lfortran_intrinsic_iso_c_binding_c_f_pointer(%c_ptr*, i32*) +define void @__module_lfortran_intrinsic_math_cpu_time(double* %t) { +.entry: + call void @_lfortran_cpu_time(double* %t) + br label %return + +return: ; preds = %.entry + ret void +} + +declare void @_lfortran_cpu_time(double*) + define double @__module_lfortran_intrinsic_math_dabs(double* %x) { .entry: %r = alloca double, align 8 diff --git a/tests/reference/llvm-intrinsics_05-d3cf5f5.json b/tests/reference/llvm-intrinsics_05-d3cf5f5.json index 8cf01b68b6..941d7b2514 100644 --- a/tests/reference/llvm-intrinsics_05-d3cf5f5.json +++ b/tests/reference/llvm-intrinsics_05-d3cf5f5.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "llvm-intrinsics_05-d3cf5f5.stdout", - "stdout_hash": "cf983d45ed882bc9a9ecf03717e5d04d9d5ea49ad6e11b3bbb16cd91", + "stdout_hash": "bc3377099c8da789c7baa6e06c4a3c3111a44c745c9eb432766070ce", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/llvm-intrinsics_05-d3cf5f5.stdout b/tests/reference/llvm-intrinsics_05-d3cf5f5.stdout index c281fae6a6..63a1a8610f 100644 --- a/tests/reference/llvm-intrinsics_05-d3cf5f5.stdout +++ b/tests/reference/llvm-intrinsics_05-d3cf5f5.stdout @@ -12,6 +12,17 @@ declare i8* @__module_lfortran_intrinsic_array_char(i32*) declare void @__module_lfortran_intrinsic_iso_c_binding_c_f_pointer(%c_ptr*, i32*) +define void @__module_lfortran_intrinsic_math_cpu_time(double* %t) { +.entry: + call void @_lfortran_cpu_time(double* %t) + br label %return + +return: ; preds = %.entry + ret void +} + +declare void @_lfortran_cpu_time(double*) + define float @__module_lfortran_intrinsic_math_scosh(float* %x) { .entry: %r = alloca float, align 4 diff --git a/tests/reference/llvm-intrinsics_06-91045e5.json b/tests/reference/llvm-intrinsics_06-91045e5.json index a5611d2f36..a4f21d86f2 100644 --- a/tests/reference/llvm-intrinsics_06-91045e5.json +++ b/tests/reference/llvm-intrinsics_06-91045e5.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "llvm-intrinsics_06-91045e5.stdout", - "stdout_hash": "c613d1aaa0ae839c1ddd5edd9b1daa41b627f24b2310fa72a23b2a89", + "stdout_hash": "752d9db09d43482c9dd821091e04f143296e65a625aff2c958ed240e", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/llvm-intrinsics_06-91045e5.stdout b/tests/reference/llvm-intrinsics_06-91045e5.stdout index 098b118647..d29bd98eb5 100644 --- a/tests/reference/llvm-intrinsics_06-91045e5.stdout +++ b/tests/reference/llvm-intrinsics_06-91045e5.stdout @@ -15,6 +15,17 @@ declare i8* @__module_lfortran_intrinsic_array_char(i32*) declare void @__module_lfortran_intrinsic_iso_c_binding_c_f_pointer(%c_ptr*, i32*) +define void @__module_lfortran_intrinsic_math_cpu_time(double* %t) { +.entry: + call void @_lfortran_cpu_time(double* %t) + br label %return + +return: ; preds = %.entry + ret void +} + +declare void @_lfortran_cpu_time(double*) + define float @__module_lfortran_intrinsic_math_sacos(float* %x) { .entry: %r = alloca float, align 4 diff --git a/tests/reference/llvm-sin_03-aebf02d.json b/tests/reference/llvm-sin_03-aebf02d.json index a2ff7243ea..bb2f038e67 100644 --- a/tests/reference/llvm-sin_03-aebf02d.json +++ b/tests/reference/llvm-sin_03-aebf02d.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "llvm-sin_03-aebf02d.stdout", - "stdout_hash": "dbf44fbe0b7a84500f3f35fbcadeb5a9a766325559e42b650a639346", + "stdout_hash": "d2c07d05d819d28f11f5d7db5b13dd2c9b5580f892574b1aa23667ed", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/llvm-sin_03-aebf02d.stdout b/tests/reference/llvm-sin_03-aebf02d.stdout index 41c712c1f8..4bab89f28b 100644 --- a/tests/reference/llvm-sin_03-aebf02d.stdout +++ b/tests/reference/llvm-sin_03-aebf02d.stdout @@ -10,6 +10,17 @@ declare i8* @__module_lfortran_intrinsic_array_char(i32*) declare void @__module_lfortran_intrinsic_iso_c_binding_c_f_pointer(%c_ptr*, i32*) +define void @__module_lfortran_intrinsic_math_cpu_time(double* %t) { +.entry: + call void @_lfortran_cpu_time(double* %t) + br label %return + +return: ; preds = %.entry + ret void +} + +declare void @_lfortran_cpu_time(double*) + define double @__module_lfortran_intrinsic_math_dsin(double* %x) { .entry: %r = alloca double, align 8 -- GitLab From c564cbd47722b8aefcddc9edce61255256df6d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= <ondrej@certik.us> Date: Sun, 17 Oct 2021 11:06:48 -0600 Subject: [PATCH 6/6] Enable the cpu_time_01 test --- integration_tests/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/integration_tests/CMakeLists.txt b/integration_tests/CMakeLists.txt index 7788c908bc..d006d8a48e 100644 --- a/integration_tests/CMakeLists.txt +++ b/integration_tests/CMakeLists.txt @@ -397,3 +397,4 @@ RUN(NAME sin_02 LABELS gfortran llvm) RUN(NAME sin_03 LABELS gfortran llvm) RUN(NAME sin_04 LABELS gfortran llvm) RUN(NAME bits_01 LABELS gfortran llvm) +RUN(NAME cpu_time_01 LABELS gfortran llvm) -- GitLab