Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

more use AbstractInterpreter interfaces, don't hardcode NativeInterpreter params #251

Merged
merged 1 commit into from
Nov 24, 2021

Conversation

aviatesk
Copy link
Member

julia> function summer(f, xs)
           s = zero(eltype(xs))
           for x in xs
               s += f(x)
           end
           s
       end
summer (generic function with 1 method)

julia> @descend interp=CC.NativeInterpreter(; opt_params=CC.OptimizationParams(; inline_nonleaf_penalty=10)) inline_cost=true summer(sin, Number[1,2,3])
summer(f, xs) in Main at REPL[9]:1
│ ─ %-1  = invoke summer(::typeof(sin),::Vector{Number})::Any
3 1 ──  1 %1  = Base.bitcast(UInt64, 1)::UInt64        │╻╷╷   iterate
  │     1 %2  = Base.sub_int(%1, 0x0000000000000001)::UInt64   iterate
  │     4 %3  = Base.arraylen(_3)::Int64               │││╻     length
  │     1 %4  = Base.sle_int(0, %3)::Bool              ││││╻╷    >=1 %5  = Base.bitcast(UInt64, %3)::UInt64       │││││╻     reinterpret
  │     1 %6  = Base.ult_int(%2, %5)::Bool             ││││╻     <1 %7  = Base.and_int(%4, %6)::Bool             ││││╻     &
  └───  0       goto #3 if not %7                      │││
  2 ──  4 %9  = Base.arrayref(false, _3, 1)::Number    │││╻     getindex
  │     1 %10 = Base.add_int(1, 1)::Int64              │││╻     +
  └───  0       goto #4                                │││
  3 ──  0       Base.nothing::Core.Const(nothing)      │││
  └───  0       goto #4                                │││
  4 ┄─  0 %14 = φ (#2 => false, #3 => true)::Bool      ││0 %15 = φ (#2 => %9)::Number                   ││0 %16 = φ (#2 => %10)::Int64                   ││
  └───  0       goto #5                                ││
  5 ──  0 %18 = Base.not_int(%14)::Bool                │
  └───  0       goto #11 if not %18                    │
  6 ┄─  0 %20 = φ (#5 => %15, #10 => %38)::Number      │0 %21 = φ (#5 => %16, #10 => %39)::Int64       │0 %22 = φ (#5 => 0, #10 => %24)::Any           │
410 %23 = (_2)(%20)::Any                         │
  │    10 %24 = (%22 + %23)::Any51 %25 = Base.bitcast(UInt64, %21)::UInt64      │╻╷    iterate
  │     1 %26 = Base.sub_int(%25, 0x0000000000000001)::UInt64  -4 %27 = Base.arraylen(_3)::Int64               ││╻     length
  │     1 %28 = Base.sle_int(0, %27)::Bool             │││╻╷    >=1 %29 = Base.bitcast(UInt64, %27)::UInt64      ││││╻     reinterpret
  │     1 %30 = Base.ult_int(%26, %29)::Bool           │││╻     <1 %31 = Base.and_int(%28, %30)::Bool           │││╻     &
  └───  0       goto #8 if not %31                     ││
  7 ──  4 %33 = Base.arrayref(false, _3, %21)::Number  ││╻     getindex
  │     1 %34 = Base.add_int(%21, 1)::Int64            ││╻     +
  └───  0       goto #9                                ││
  8 ──  0       Base.nothing::Core.Const(nothing)      ││
  └───  0       goto #9                                ││
  9 ┄─  0 %38 = φ (#7 => %33)::Number                  │0 %39 = φ (#7 => %34)::Int64                   │0 %40 = φ (#7 => false, #8 => true)::Bool      │0 %41 = Base.not_int(%40)::Bool                │
  └───  0       goto #11 if not %41                    │
  1040       goto #6                                │
6 110 %44 = φ (#9 => %24, #5 => 0)::Any            │
  └───  0       return %44                             │
Select a call to descend into or  to ascend. [q]uit. [b]ookmark.
Toggles: [o]ptimize, [w]arn, [h]ide type-stable statements, [d]ebuginfo, [r]emarks, [i]nlining costs, [t]ype annotations, [s]yntax highlight for Source/LLVM/Native.
Show: [S]ource code, [A]ST, [T]yped code, [L]LVM IR, [N]ative code
Actions: [E]dit source code, [R]evise and redisplay
Advanced: dump [P]arams cache.
 • 

…rpreter` params

```julia
julia> function summer(f, xs)
           s = zero(eltype(xs))
           for x in xs
               s += f(x)
           end
           s
       end
summer (generic function with 1 method)

julia> @Descend interp=CC.NativeInterpreter(; opt_params=CC.OptimizationParams(; inline_nonleaf_penalty=10)) inline_cost=true summer(sin, Number[1,2,3])
summer(f, xs) in Main at REPL[9]:1
│ ─ %-1  = invoke summer(::typeof(sin),::Vector{Number})::Any
3 1 ──  1 %1  = Base.bitcast(UInt64, 1)::UInt64        │╻╷╷   iterate
  │     1 %2  = Base.sub_int(%1, 0x0000000000000001)::UInt64   iterate
  │     4 %3  = Base.arraylen(_3)::Int64               │││╻     length
  │     1 %4  = Base.sle_int(0, %3)::Bool              ││││╻╷    >=
  │     1 %5  = Base.bitcast(UInt64, %3)::UInt64       │││││╻     reinterpret
  │     1 %6  = Base.ult_int(%2, %5)::Bool             ││││╻     <
  │     1 %7  = Base.and_int(%4, %6)::Bool             ││││╻     &
  └───  0       goto #3 if not %7                      │││
  2 ──  4 %9  = Base.arrayref(false, _3, 1)::Number    │││╻     getindex
  │     1 %10 = Base.add_int(1, 1)::Int64              │││╻     +
  └───  0       goto #4                                │││
  3 ──  0       Base.nothing::Core.Const(nothing)      │││
  └───  0       goto #4                                │││
  4 ┄─  0 %14 = φ (#2 => false, #3 => true)::Bool      ││
  │     0 %15 = φ (#2 => %9)::Number                   ││
  │     0 %16 = φ (#2 => %10)::Int64                   ││
  └───  0       goto #5                                ││
  5 ──  0 %18 = Base.not_int(%14)::Bool                │
  └───  0       goto #11 if not %18                    │
  6 ┄─  0 %20 = φ (#5 => %15, #10 => %38)::Number      │
  │     0 %21 = φ (#5 => %16, #10 => %39)::Int64       │
  │     0 %22 = φ (#5 => 0, #10 => %24)::Any           │
4 │    10 %23 = (_2)(%20)::Any                         │
  │    10 %24 = (%22 + %23)::Any                       │
5 │     1 %25 = Base.bitcast(UInt64, %21)::UInt64      │╻╷    iterate
  │     1 %26 = Base.sub_int(%25, 0x0000000000000001)::UInt64  -
  │     4 %27 = Base.arraylen(_3)::Int64               ││╻     length
  │     1 %28 = Base.sle_int(0, %27)::Bool             │││╻╷    >=
  │     1 %29 = Base.bitcast(UInt64, %27)::UInt64      ││││╻     reinterpret
  │     1 %30 = Base.ult_int(%26, %29)::Bool           │││╻     <
  │     1 %31 = Base.and_int(%28, %30)::Bool           │││╻     &
  └───  0       goto #8 if not %31                     ││
  7 ──  4 %33 = Base.arrayref(false, _3, %21)::Number  ││╻     getindex
  │     1 %34 = Base.add_int(%21, 1)::Int64            ││╻     +
  └───  0       goto #9                                ││
  8 ──  0       Base.nothing::Core.Const(nothing)      ││
  └───  0       goto #9                                ││
  9 ┄─  0 %38 = φ (#7 => %33)::Number                  │
  │     0 %39 = φ (#7 => %34)::Int64                   │
  │     0 %40 = φ (#7 => false, #8 => true)::Bool      │
  │     0 %41 = Base.not_int(%40)::Bool                │
  └───  0       goto #11 if not %41                    │
  10 ─ 40       goto #6                                │
6 11 ┄  0 %44 = φ (#9 => %24, #5 => 0)::Any            │
  └───  0       return %44                             │
Select a call to descend into or ↩ to ascend. [q]uit. [b]ookmark.
Toggles: [o]ptimize, [w]arn, [h]ide type-stable statements, [d]ebuginfo, [r]emarks, [i]nlining costs, [t]ype annotations, [s]yntax highlight for Source/LLVM/Native.
Show: [S]ource code, [A]ST, [T]yped code, [L]LVM IR, [N]ative code
Actions: [E]dit source code, [R]evise and redisplay
Advanced: dump [P]arams cache.
 • ↩
```
@codecov-commenter
Copy link

codecov-commenter commented Nov 24, 2021

Codecov Report

Merging #251 (ce3ee78) into master (779645a) will increase coverage by 0.20%.
The diff coverage is 38.09%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #251      +/-   ##
==========================================
+ Coverage   50.40%   50.60%   +0.20%     
==========================================
  Files           7        7              
  Lines        1000      996       -4     
==========================================
  Hits          504      504              
+ Misses        496      492       -4     
Impacted Files Coverage Δ
src/codeview.jl 56.92% <27.27%> (+0.43%) ⬆️
src/Cthulhu.jl 42.51% <33.33%> (ø)
src/reflection.jl 78.94% <57.14%> (-0.25%) ⬇️
src/callsite.jl 26.57% <0.00%> (-0.13%) ⬇️
src/backedges.jl 29.41% <0.00%> (+2.97%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 779645a...ce3ee78. Read the comment docs.

@aviatesk aviatesk merged commit 55605fd into master Nov 24, 2021
@aviatesk aviatesk deleted the avi/forward branch November 24, 2021 17:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants