|
324 | 324 | end |
325 | 325 |
|
326 | 326 | @testset "unbound typevars" begin |
327 | | - mod = @eval module $(gensym()) |
328 | | - invalid_kernel() where {unbound} = return |
| 327 | + # suppress the warning Julia emits when defining a method with an unbound typevar |
| 328 | + mod = redirect_stderr(devnull) do |
| 329 | + @eval module $(gensym()) |
| 330 | + invalid_kernel() where {unbound} = return |
| 331 | + end |
329 | 332 | end |
330 | 333 | @test_throws KernelError Native.code_llvm(devnull, mod.invalid_kernel, Tuple{}) |
331 | 334 | end |
@@ -456,20 +459,27 @@ end |
456 | 459 | Native.code_llvm(mod.g, Tuple{Int64}; dump_module=true, kernel=true) |
457 | 460 | end |
458 | 461 |
|
459 | | - @test @filecheck(begin |
460 | | - @check_not "@{{(julia|j)_expensive_[0-9]+}}" |
461 | | - Native.code_llvm(mod.g, Tuple{Int64}; dump_module=true, kernel=true, always_inline=true) |
462 | | - end) broken=broken |
| 462 | + # suppress FileCheck diagnostics when the failure is known and expected |
| 463 | + quiet(f) = broken ? redirect_stderr(f, devnull) : f() |
| 464 | + |
| 465 | + @test quiet() do |
| 466 | + @filecheck begin |
| 467 | + @check_not "@{{(julia|j)_expensive_[0-9]+}}" |
| 468 | + Native.code_llvm(mod.g, Tuple{Int64}; dump_module=true, kernel=true, always_inline=true) |
| 469 | + end |
| 470 | + end broken=broken |
463 | 471 |
|
464 | 472 | @test @filecheck begin |
465 | 473 | @check "@{{(julia|j)_expensive_[0-9]+}}" |
466 | 474 | Native.code_llvm(mod.h, Tuple{Int64}; dump_module=true, kernel=true) |
467 | 475 | end |
468 | 476 |
|
469 | | - @test @filecheck(begin |
470 | | - @check_not "@{{(julia|j)_expensive_[0-9]+}}" |
471 | | - Native.code_llvm(mod.h, Tuple{Int64}; dump_module=true, kernel=true, always_inline=true) |
472 | | - end) broken=broken |
| 477 | + @test quiet() do |
| 478 | + @filecheck begin |
| 479 | + @check_not "@{{(julia|j)_expensive_[0-9]+}}" |
| 480 | + Native.code_llvm(mod.h, Tuple{Int64}; dump_module=true, kernel=true, always_inline=true) |
| 481 | + end |
| 482 | + end broken=broken |
473 | 483 | end |
474 | 484 |
|
475 | 485 | @testset "function attributes" begin |
|
495 | 505 | end |
496 | 506 | end |
497 | 507 |
|
| 508 | +@testset "CPU reference resolution" begin |
| 509 | + # JIT-private symbols like `jl_get_pgcstack_resolved` (JuliaLang/julia#61527) cannot |
| 510 | + # be looked up using `jl_cglobal`, so we should only resolve bindings that are |
| 511 | + # actually loaded from, leaving called functions alone. |
| 512 | + job, _ = Native.create_job(identity, (Nothing,)) |
| 513 | + JuliaContext() do ctx |
| 514 | + mod = parse(LLVM.Module, """ |
| 515 | + declare void @jl_get_pgcstack_resolved() |
| 516 | +
|
| 517 | + define void @entry() { |
| 518 | + call void @jl_get_pgcstack_resolved() |
| 519 | + ret void |
| 520 | + }""") |
| 521 | + GPUCompiler.prepare_execution!(job, mod) |
| 522 | + @test haskey(functions(mod), "jl_get_pgcstack_resolved") |
| 523 | + end |
| 524 | +end |
| 525 | + |
498 | 526 | end |
499 | 527 |
|
500 | 528 | ############################################################################################ |
|
0 commit comments