Skip to content

Commit cdd8223

Browse files
committed
Merge branch 'master' into useaffinity
2 parents c37c34c + e8f469a commit cdd8223

File tree

4 files changed

+17
-15
lines changed

4 files changed

+17
-15
lines changed

base/compiler/optimize.jl

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ end
384384

385385
"""
386386
finish(interp::AbstractInterpreter, opt::OptimizationState,
387-
params::OptimizationParams, ir::IRCode, result) -> analyzed::Union{Nothing,ConstAPI}
387+
params::OptimizationParams, ir::IRCode, caller::InferenceResult) -> analyzed::Union{Nothing,ConstAPI}
388388
389389
Post process information derived by Julia-level optimizations for later uses:
390390
- computes "purity", i.e. side-effect-freeness
@@ -394,16 +394,18 @@ In a case when the purity is proven, `finish` can return `ConstAPI` object wrapp
394394
value so that the runtime system will use the constant calling convention for the method calls.
395395
"""
396396
function finish(interp::AbstractInterpreter, opt::OptimizationState,
397-
params::OptimizationParams, ir::IRCode, @nospecialize(result))
397+
params::OptimizationParams, ir::IRCode, caller::InferenceResult)
398398
(; src, linfo) = opt
399399
(; def, specTypes) = linfo
400400

401401
analyzed = nothing # `ConstAPI` if this call can use constant calling convention
402402
force_noinline = _any(@nospecialize(x) -> isexpr(x, :meta) && x.args[1] === :noinline, ir.meta)
403403

404404
# compute inlining and other related optimizations
405-
wresult = isa(result, InterConditional) ? widenconditional(result) : result
406-
if (isa(wresult, Const) || isconstType(wresult))
405+
result = caller.result
406+
@assert !(result isa LimitedAccuracy)
407+
result = isa(result, InterConditional) ? widenconditional(result) : result
408+
if (isa(result, Const) || isconstType(result))
407409
proven_pure = false
408410
# must be proven pure to use constant calling convention;
409411
# otherwise we might skip throwing errors (issue #20704)
@@ -437,14 +439,14 @@ function finish(interp::AbstractInterpreter, opt::OptimizationState,
437439
# Still set pure flag to make sure `inference` tests pass
438440
# and to possibly enable more optimization in the future
439441
src.pure = true
440-
if isa(wresult, Const)
441-
val = wresult.val
442+
if isa(result, Const)
443+
val = result.val
442444
if is_inlineable_constant(val)
443445
analyzed = ConstAPI(val)
444446
end
445447
else
446-
@assert isconstType(wresult)
447-
analyzed = ConstAPI(wresult.parameters[1])
448+
@assert isconstType(result)
449+
analyzed = ConstAPI(result.parameters[1])
448450
end
449451
force_noinline || (src.inlineable = true)
450452
end
@@ -501,9 +503,10 @@ function finish(interp::AbstractInterpreter, opt::OptimizationState,
501503
end
502504

503505
# run the optimization work
504-
function optimize(interp::AbstractInterpreter, opt::OptimizationState, params::OptimizationParams, @nospecialize(result))
506+
function optimize(interp::AbstractInterpreter, opt::OptimizationState,
507+
params::OptimizationParams, caller::InferenceResult)
505508
@timeit "optimizer" ir = run_passes(opt.src, opt)
506-
return finish(interp, opt, params, ir, result)
509+
return finish(interp, opt, params, ir, caller)
507510
end
508511

509512
function run_passes(ci::CodeInfo, sv::OptimizationState)

base/compiler/typeinfer.jl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,7 @@ function _typeinf(interp::AbstractInterpreter, frame::InferenceState)
250250
for (caller, _, _) in results
251251
opt = caller.src
252252
if opt isa OptimizationState # implies `may_optimize(interp) === true`
253-
result_type = caller.result
254-
@assert !(result_type isa LimitedAccuracy)
255-
analyzed = optimize(interp, opt, OptimizationParams(interp), result_type)
253+
analyzed = optimize(interp, opt, OptimizationParams(interp), caller)
256254
if isa(analyzed, ConstAPI)
257255
# XXX: The work in ir_to_codeinf! is essentially wasted. The only reason
258256
# we're doing it is so that code_llvm can return the code

stdlib/LinearAlgebra/src/triangular.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1485,7 +1485,7 @@ end
14851485
function ldiv!(xA::Union{UpperTriangular,UnitUpperTriangular}, B::UpperTriangular)
14861486
return UpperTriangular(ldiv!(xA, triu!(B.data)))
14871487
end
1488-
function ldiv!(xA::Union{LowerTriangular,UnitLowerTriangular}, B::UpperTriangular)
1488+
function ldiv!(xA::Union{LowerTriangular,UnitLowerTriangular}, B::LowerTriangular)
14891489
return LowerTriangular(ldiv!(xA, tril!(B.data)))
14901490
end
14911491

stdlib/LinearAlgebra/test/triangular.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,8 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo
376376
@test_throws DimensionMismatch A2' * offsizeA
377377
@test_throws DimensionMismatch A2 * offsizeA
378378
if (uplo1 == uplo2 && elty1 == elty2 != Int && t1 != UnitLowerTriangular && t1 != UnitUpperTriangular)
379-
@test rdiv!(copy(A1), copy(A2)) A1/A2 Matrix(A1)/Matrix(A2)
379+
@test rdiv!(copy(A1), copy(A2))::t1 A1/A2 Matrix(A1)/Matrix(A2)
380+
@test ldiv!(copy(A2), copy(A1))::t1 A2\A1 Matrix(A2)\Matrix(A1)
380381
end
381382
if (uplo1 != uplo2 && elty1 == elty2 != Int && t2 != UnitLowerTriangular && t2 != UnitUpperTriangular)
382383
@test lmul!(adjoint(copy(A1)), copy(A2)) A1'*A2 Matrix(A1)'*Matrix(A2)

0 commit comments

Comments
 (0)