1
1
# This file is a part of Julia. License is MIT: https://julialang.org/license
2
2
3
- # RUN: julia --startup-file=no %s %t && llvm-link -S %t/* -o %t/module.ll
3
+ # RUN: julia --startup-file=no %s %t -O && llvm-link -S %t/* -o %t/module.ll
4
4
# RUN: cat %t/module.ll | FileCheck %s
5
5
6
6
# # Notes:
@@ -14,21 +14,31 @@ include(joinpath("..", "testhelpers", "llvmpasses.jl"))
14
14
15
15
import Base. FastMath
16
16
17
- # CHECK: call fast float @llvm.sqrt.f32(float %{{[0-9]+}} )
17
+ # CHECK: call fast float @llvm.sqrt.f32(float %"x::Float32" )
18
18
emit (FastMath. sqrt_fast, Float32)
19
19
20
20
21
21
# Float16 operations should be performed as Float32, unless @fastmath is specified
22
22
# TODO : this is not true for platforms that natively support Float16
23
23
24
24
foo (x:: T ,y:: T ) where T = x- y == zero (T)
25
- # LOWER: fsub half %0, %1
26
- # FINAL: %2 = fpext half %0 to float
27
- # FINAL: %3 = fpext half %1 to float
28
- # FINAL: fsub half %2, %3
25
+ # CHECK: define {{(swiftcc )?}}i8 @julia_foo_{{[0-9]+}}({{.*}}half %[[X:"x::Float16"]], half %[[Y:"y::Float16"]]) {{.*}}{
26
+ # CHECK-DAG: %[[XEXT:[0-9]+]] = fpext half %[[X]] to float
27
+ # CHECK-DAG: %[[YEXT:[0-9]+]] = fpext half %[[Y]] to float
28
+ # CHECK: %[[DIFF:[0-9]+]] = fsub float %[[XEXT]], %[[YEXT]]
29
+ # CHECK: %[[TRUNC:[0-9]+]] = fptrunc float %[[DIFF]] to half
30
+ # CHECK: %[[DIFFEXT:[0-9]+]] = fpext half %[[TRUNC]] to float
31
+ # CHECK: %[[CMP:[0-9]+]] = fcmp oeq float %[[DIFFEXT]], 0.000000e+00
32
+ # CHECK: %[[ZEXT:[0-9]+]] = zext i1 %[[CMP]] to i8
33
+ # CHECK: ret i8 %[[ZEXT]]
34
+ # CHECK: }
29
35
emit (foo, Float16, Float16)
30
36
31
37
@fastmath foo (x:: T ,y:: T ) where T = x- y == zero (T)
32
- # LOWER: fsub fast half %0, %1
33
- # FINAL: fsub fast half %0, %1
38
+ # CHECK: define {{(swiftcc )?}}i8 @julia_foo_{{[0-9]+}}({{.*}}half %[[X:"x::Float16"]], half %[[Y:"y::Float16"]]) {{.*}}{
39
+ # CHECK: %[[DIFF:[0-9]+]] = fsub fast half %[[X]], %[[Y]]
40
+ # CHECK: %[[CMP:[0-9]+]] = fcmp fast oeq half %[[DIFF]], 0xH0000
41
+ # CHECK: %[[ZEXT:[0-9]+]] = zext i1 %[[CMP]] to i8
42
+ # CHECK: ret i8 %[[ZEXT]]
43
+ # CHECK: }
34
44
emit (foo, Float16, Float16)
0 commit comments