]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/AMDGPU/br_cc.f16.ll
Vendor import of llvm trunk r290819:
[FreeBSD/FreeBSD.git] / test / CodeGen / AMDGPU / br_cc.f16.ll
1 ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI %s
2 ; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s
3
4 ; GCN-LABEL: {{^}}br_cc_f16
5 ; GCN: buffer_load_ushort v[[A_F16:[0-9]+]]
6 ; GCN: buffer_load_ushort v[[B_F16:[0-9]+]]
7
8 ; SI:  v_cvt_f32_f16_e32 v[[A_F32:[0-9]+]], v[[A_F16]]
9 ; SI:  v_cvt_f32_f16_e32 v[[B_F32:[0-9]+]], v[[B_F16]]
10 ; SI:  v_cmp_nlt_f32_e32 vcc, v[[A_F32]], v[[B_F32]]
11 ; VI:  v_cmp_nlt_f16_e32 vcc, v[[A_F16]], v[[B_F16]]
12 ; GCN: s_cbranch_vccnz
13
14 ; GCN: one{{$}}
15 ; SI: v_cvt_f16_f32_e32 v[[A_F16:[0-9]+]], v[[A_F32]]
16 ; SI: s_branch
17 ; VI: buffer_store_short
18 ; VI: s_endpgm
19
20 ; GCN: two{{$}}
21 ; SI:  v_cvt_f16_f32_e32 v[[B_F16:[0-9]+]], v[[B_F32]]
22 ; GCN: buffer_store_short v[[B_F16]]
23 ; GCN: s_endpgm
24 define void @br_cc_f16(
25     half addrspace(1)* %r,
26     half addrspace(1)* %a,
27     half addrspace(1)* %b) {
28 entry:
29   %a.val = load half, half addrspace(1)* %a
30   %b.val = load half, half addrspace(1)* %b
31   %fcmp = fcmp olt half %a.val, %b.val
32   br i1 %fcmp, label %one, label %two
33
34 one:
35   store half %a.val, half addrspace(1)* %r
36   ret void
37
38 two:
39   store half %b.val, half addrspace(1)* %r
40   ret void
41 }
42
43 ; GCN-LABEL: {{^}}br_cc_f16_imm_a
44 ; SI: v_mov_b32_e32 v[[A_F16:[0-9]+]], 0x3800{{$}}
45 ; SI:  v_cvt_f32_f16_e32 v[[A_F32:[0-9]+]], v[[A_F16]]
46 ; GCN: buffer_load_ushort v[[B_F16:[0-9]+]]
47
48 ; SI:  v_cvt_f32_f16_e32 v[[B_F32:[0-9]+]], v[[B_F16]]
49 ; SI:  v_cmp_ngt_f32_e32 vcc, v[[B_F32]], v[[A_F32]]
50 ; SI: s_cbranch_vccz
51
52 ; VI:  v_cmp_nlt_f16_e32 vcc, 0.5, v[[B_F16]]
53 ; VI: s_cbranch_vccnz
54
55 ; VI: one{{$}}
56 ; VI: v_mov_b32_e32 v[[A_F16:[0-9]+]], 0x380{{0|1}}{{$}}
57
58 ; GCN: two{{$}}
59 ; SI:  v_cvt_f16_f32_e32 v[[B_F16:[0-9]+]], v[[B_F32]]
60
61 ; SI: one{{$}}
62 ; SI: buffer_store_short v[[A_F16]]
63 ; SI: s_endpgm
64
65 define void @br_cc_f16_imm_a(
66     half addrspace(1)* %r,
67     half addrspace(1)* %b) {
68 entry:
69   %b.val = load half, half addrspace(1)* %b
70   %fcmp = fcmp olt half 0xH3800, %b.val
71   br i1 %fcmp, label %one, label %two
72
73 one:
74   store half 0xH3800, half addrspace(1)* %r
75   ret void
76
77 two:
78   store half %b.val, half addrspace(1)* %r
79   ret void
80 }
81
82 ; GCN-LABEL: {{^}}br_cc_f16_imm_b
83 ; SI: v_mov_b32_e32 v[[B_F16:[0-9]+]], 0x3800{{$}}
84 ; SI:  v_cvt_f32_f16_e32 v[[B_F32:[0-9]+]], v[[B_F16]]
85 ; GCN: buffer_load_ushort v[[A_F16:[0-9]+]]
86
87 ; SI:  v_cvt_f32_f16_e32 v[[A_F32:[0-9]+]], v[[A_F16]]
88 ; SI:  v_cmp_nlt_f32_e32 vcc, v[[A_F32]], v[[B_F32]]
89 ; VI:  v_cmp_ngt_f16_e32 vcc, 0.5, v[[A_F16]]
90 ; GCN: s_cbranch_vccnz
91
92 ; GCN: one{{$}}
93 ; SI:  v_cvt_f16_f32_e32 v[[A_F16:[0-9]+]], v[[A_F32]]
94
95 ; GCN: two{{$}}
96 ; VI:  v_mov_b32_e32 v[[B_F16:[0-9]+]], 0x3800{{$}}
97 ; GCN: buffer_store_short v[[B_F16]]
98 ; GCN: s_endpgm
99 define void @br_cc_f16_imm_b(
100     half addrspace(1)* %r,
101     half addrspace(1)* %a) {
102 entry:
103   %a.val = load half, half addrspace(1)* %a
104   %fcmp = fcmp olt half %a.val, 0xH3800
105   br i1 %fcmp, label %one, label %two
106
107 one:
108   store half %a.val, half addrspace(1)* %r
109   ret void
110
111 two:
112   store half 0xH3800, half addrspace(1)* %r
113   ret void
114 }