Skip to content

Commit 88d42b1

Browse files
authored
Fixes for LLVM 15. (#343)
* Fix tests incorrectly gates on supports_types_pointers. * Remove upgrade branch from test roster.
1 parent 0ea0215 commit 88d42b1

File tree

5 files changed

+78
-70
lines changed

5 files changed

+78
-70
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ jobs:
6767
strategy:
6868
fail-fast: false
6969
matrix:
70-
branch: ['release-1.7', 'release-1.8', 'release-1.9', 'master', 'vc/upgrade_llvm15']
70+
branch: ['release-1.7', 'release-1.8', 'release-1.9', 'master']
7171
os: [ubuntu-latest, macOS-latest]
7272
arch: [x64]
7373
steps:

src/core/value/constant.jl

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -352,16 +352,13 @@ register(ConstantVector, API.LLVMConstantVectorValueKind)
352352
export ConstantExpr,
353353

354354
const_neg, const_nswneg, const_nuwneg, const_fneg, const_not, const_add,
355-
const_nswadd, const_nuwadd, const_fadd, const_sub, const_nswsub, const_nuwsub,
356-
const_fsub, const_mul, const_nswmul, const_nuwmul, const_fmul, const_udiv,
357-
const_sdiv, const_fdiv, const_urem, const_srem, const_frem, const_and, const_or,
358-
const_xor, const_icmp, const_fcmp, const_shl, const_lshr, const_ashr, const_gep,
359-
const_inbounds_gep, const_trunc, const_sext, const_zext, const_fptrunc, const_fpext,
360-
const_uitofp, const_sitofp, const_fptoui, const_fptosi, const_ptrtoint,
361-
const_inttoptr, const_bitcast, const_addrspacecast, const_zextorbitcast,
362-
const_sextorbitcast, const_truncorbitcast, const_pointercast, const_intcast,
363-
const_fpcast, const_select, const_extractelement, const_insertelement,
364-
const_shufflevector, const_extractvalue, const_insertvalue
355+
const_nswadd, const_nuwadd, const_sub, const_nswsub, const_nuwsub, const_mul,
356+
const_nswmul, const_nuwmul, const_and, const_or, const_xor, const_icmp, const_fcmp,
357+
const_shl, const_lshr, const_ashr, const_gep, const_inbounds_gep, const_trunc,
358+
const_sext, const_zext, const_fptrunc, const_fpext, const_uitofp, const_sitofp,
359+
const_fptoui, const_fptosi, const_ptrtoint, const_inttoptr, const_bitcast,
360+
const_addrspacecast, const_zextorbitcast, const_sextorbitcast, const_truncorbitcast,
361+
const_pointercast, const_intcast, const_fpcast, const_select, const_shufflevector
365362

366363
@checked struct ConstantExpr <: Constant
367364
ref::API.LLVMValueRef
@@ -394,9 +391,6 @@ const_nswadd(lhs::Constant, rhs::Constant) =
394391
const_nuwadd(lhs::Constant, rhs::Constant) =
395392
Value(API.LLVMConstNUWAdd(lhs, rhs))
396393

397-
const_fadd(lhs::Constant, rhs::Constant) =
398-
Value(API.LLVMConstFAdd(lhs, rhs))
399-
400394
const_sub(lhs::Constant, rhs::Constant) =
401395
Value(API.LLVMConstSub(lhs, rhs))
402396

@@ -406,9 +400,6 @@ const_nswsub(lhs::Constant, rhs::Constant) =
406400
const_nuwsub(lhs::Constant, rhs::Constant) =
407401
Value(API.LLVMConstNUWSub(lhs, rhs))
408402

409-
const_fsub(lhs::Constant, rhs::Constant) =
410-
Value(API.LLVMConstFSub(lhs, rhs))
411-
412403
const_mul(lhs::Constant, rhs::Constant) =
413404
Value(API.LLVMConstMul(lhs, rhs))
414405

@@ -418,27 +409,6 @@ const_nswmul(lhs::Constant, rhs::Constant) =
418409
const_nuwmul(lhs::Constant, rhs::Constant) =
419410
Value(API.LLVMConstNUWMul(lhs, rhs))
420411

421-
const_fmul(lhs::Constant, rhs::Constant) =
422-
Value(API.LLVMConstFMul(lhs, rhs))
423-
424-
const_udiv(lhs::Constant, rhs::Constant; exact::Base.Bool=false) =
425-
Value(exact ? API.LLVMConstExactUDiv(lhs, rhs) : API.LLVMConstUDiv(lhs, rhs))
426-
427-
const_sdiv(lhs::Constant, rhs::Constant; exact::Base.Bool=false) =
428-
Value(exact ? API.LLVMConstExactSDiv(lhs, rhs) : API.LLVMConstSDiv(lhs, rhs))
429-
430-
const_fdiv(lhs::Constant, rhs::Constant) =
431-
Value(API.LLVMConstFDiv(lhs, rhs))
432-
433-
const_urem(lhs::Constant, rhs::Constant) =
434-
Value(API.LLVMConstURem(lhs, rhs))
435-
436-
const_srem(lhs::Constant, rhs::Constant) =
437-
Value(API.LLVMConstSRem(lhs, rhs))
438-
439-
const_frem(lhs::Constant, rhs::Constant) =
440-
Value(API.LLVMConstFRem(lhs, rhs))
441-
442412
const_and(lhs::Constant, rhs::Constant) =
443413
Value(API.LLVMConstAnd(lhs, rhs))
444414

@@ -552,12 +522,46 @@ const_insertelement(vector::Constant, element::Value, index::Constant) =
552522
const_shufflevector(vector1::Constant, vector2::Constant, mask::Constant) =
553523
Value(API.LLVMConstShuffleVector(vector1, vector2, mask))
554524

525+
if version() < v"15"
526+
527+
export const_extractelement, const_insertelement, const_udiv, const_sdiv, const_fdiv,
528+
const_urem, const_srem, const_frem, const_fadd, const_fsub, const_fmul
529+
555530
const_extractvalue(agg::Constant, Idx::Vector{<:Integer}) =
556531
Value(API.LLVMConstExtractValue(agg, Idx, length(Idx)))
557532

558533
const_insertvalue(agg::Constant, element::Constant, Idx::Vector{<:Integer}) =
559534
Value(API.LLVMConstInsertValue(agg, element, Idx, length(Idx)))
560535

536+
const_udiv(lhs::Constant, rhs::Constant; exact::Base.Bool=false) =
537+
Value(exact ? API.LLVMConstExactUDiv(lhs, rhs) : API.LLVMConstUDiv(lhs, rhs))
538+
539+
const_sdiv(lhs::Constant, rhs::Constant; exact::Base.Bool=false) =
540+
Value(exact ? API.LLVMConstExactSDiv(lhs, rhs) : API.LLVMConstSDiv(lhs, rhs))
541+
542+
const_fdiv(lhs::Constant, rhs::Constant) =
543+
Value(API.LLVMConstFDiv(lhs, rhs))
544+
545+
const_urem(lhs::Constant, rhs::Constant) =
546+
Value(API.LLVMConstURem(lhs, rhs))
547+
548+
const_srem(lhs::Constant, rhs::Constant) =
549+
Value(API.LLVMConstSRem(lhs, rhs))
550+
551+
const_frem(lhs::Constant, rhs::Constant) =
552+
Value(API.LLVMConstFRem(lhs, rhs))
553+
554+
const_fadd(lhs::Constant, rhs::Constant) =
555+
Value(API.LLVMConstFAdd(lhs, rhs))
556+
557+
const_fsub(lhs::Constant, rhs::Constant) =
558+
Value(API.LLVMConstFSub(lhs, rhs))
559+
560+
const_fmul(lhs::Constant, rhs::Constant) =
561+
Value(API.LLVMConstFMul(lhs, rhs))
562+
563+
end
564+
561565
# TODO: alignof, sizeof, block_address
562566

563567

src/transform.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ define_transforms([
159159
])
160160

161161
if version() < v"15"
162-
define_transforms([:ArgumentPromotion]) #only avaliable on new PM
162+
define_transforms([:ArgumentPromotion]) # only avaliable on new PM
163163
end
164164

165165
export internalize!

test/core.jl

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -587,20 +587,6 @@ end
587587
ce = f(val, other_val)::LLVM.Constant
588588
@check_ir ce "i32 84"
589589
end
590-
if supports_typed_pointers(ctx)
591-
for f in [const_udiv, const_sdiv]
592-
ce = f(val, other_val)::LLVM.Constant
593-
@check_ir ce "i32 21"
594-
595-
ce = f(val, other_val; exact=true) # TODO: test that differs::LLVM.Constant
596-
@check_ir ce "i32 21"
597-
end
598-
599-
for f in [const_urem, const_srem]
600-
ce = f(val, other_val)::LLVM.Constant
601-
@check_ir ce "i32 0"
602-
end
603-
end
604590

605591
ce = const_and(val, other_val)::LLVM.Constant
606592
@check_ir ce "i32 2"
@@ -645,6 +631,21 @@ end
645631

646632
ce = const_intcast(val, LLVM.Int16Type(ctx), true)::LLVM.Constant
647633
@check_ir ce "i16 42"
634+
635+
if LLVM.version() < v"15"
636+
for f in [const_udiv, const_sdiv]
637+
ce = f(val, other_val)::LLVM.Constant
638+
@check_ir ce "i32 21"
639+
640+
ce = f(val, other_val; exact=true) # TODO: test that differs::LLVM.Constant
641+
@check_ir ce "i32 21"
642+
end
643+
644+
for f in [const_urem, const_srem]
645+
ce = f(val, other_val)::LLVM.Constant
646+
@check_ir ce "i32 0"
647+
end
648+
end
648649
end
649650

650651
# floating-point
@@ -655,22 +656,6 @@ end
655656
@check_ir ce "float -4.200000e+01"
656657

657658
other_val = LLVM.ConstantFP(Float32(2.); ctx)
658-
if supports_typed_pointers(ctx)
659-
ce = const_fadd(val, other_val)::LLVM.Constant
660-
@check_ir ce "float 4.400000e+01"
661-
662-
ce = const_fsub(val, other_val)::LLVM.Constant
663-
@check_ir ce "float 4.000000e+01"
664-
665-
ce = const_fmul(val, other_val)::LLVM.Constant
666-
@check_ir ce "float 8.400000e+01"
667-
668-
ce = const_fdiv(val, other_val)::LLVM.Constant
669-
@check_ir ce "float 2.100000e+01"
670-
671-
ce = const_frem(val, other_val)::LLVM.Constant
672-
@check_ir ce "float 0.000000e+00"
673-
end
674659
ce = const_fcmp(LLVM.API.LLVMRealUGT, val, other_val)::LLVM.Constant
675660
@check_ir ce "i1 true"
676661

@@ -688,6 +673,25 @@ end
688673
ce = const_fptoui(val, LLVM.Int32Type(ctx))::LLVM.Constant
689674
@check_ir ce "i32 42"
690675
end
676+
677+
if LLVM.version() < v"15"
678+
other_val = LLVM.ConstantFP(Float32(2.); ctx)
679+
680+
ce = const_fdiv(val, other_val)::LLVM.Constant
681+
@check_ir ce "float 2.100000e+01"
682+
683+
ce = const_fadd(val, other_val)::LLVM.Constant
684+
@check_ir ce "float 4.400000e+01"
685+
686+
ce = const_fsub(val, other_val)::LLVM.Constant
687+
@check_ir ce "float 4.000000e+01"
688+
689+
ce = const_fmul(val, other_val)::LLVM.Constant
690+
@check_ir ce "float 8.400000e+01"
691+
692+
ce = const_frem(val, other_val)::LLVM.Constant
693+
@check_ir ce "float 0.000000e+00"
694+
end
691695
end
692696

693697
# pointer

test/transform.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ end
8686
speculative_execution_if_has_branch_divergence!(pm)
8787
simple_loop_unroll!(pm)
8888
inductive_range_check_elimination!(pm)
89-
if supports_typed_pointers(ctx)
89+
if LLVM.version() < v"15"
9090
argument_promotion!(pm)
9191
end
9292
constant_merge!(pm)

0 commit comments

Comments
 (0)