blob: 970260412c44a7624b0194528aa9c7e46e519f1e [file] [log] [blame]
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +00001; 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{{$}}
Matt Arsenaultad55ee52016-12-06 01:02:51 +000015; 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
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000019
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
24define void @br_cc_f16(
25 half addrspace(1)* %r,
26 half addrspace(1)* %a,
27 half addrspace(1)* %b) {
28entry:
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
34one:
35 store half %a.val, half addrspace(1)* %r
36 ret void
37
38two:
39 store half %b.val, half addrspace(1)* %r
40 ret void
41}
42
43; GCN-LABEL: {{^}}br_cc_f16_imm_a
44; GCN: v_mov_b32_e32 v[[A_F16:[0-9]+]], 0x380{{0|1}}{{$}}
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; VI: v_cmp_nle_f16_e32 vcc, v[[A_F16]], v[[B_F16]]
Matt Arsenaultad55ee52016-12-06 01:02:51 +000051; SI: s_cbranch_vccz
52; VI: s_cbranch_vccnz
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000053
Matt Arsenaultad55ee52016-12-06 01:02:51 +000054; VI: one{{$}}
55; VI: v_mov_b32_e32 v[[A_F16:[0-9]+]], 0x380{{0|1}}{{$}}
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000056
57; GCN: two{{$}}
58; SI: v_cvt_f16_f32_e32 v[[B_F16:[0-9]+]], v[[B_F32]]
Matt Arsenaultad55ee52016-12-06 01:02:51 +000059
60; SI: one{{$}}
61; SI: buffer_store_short v[[A_F16]]
62; SI: s_endpgm
63
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000064define void @br_cc_f16_imm_a(
65 half addrspace(1)* %r,
66 half addrspace(1)* %b) {
67entry:
68 %b.val = load half, half addrspace(1)* %b
69 %fcmp = fcmp olt half 0xH3800, %b.val
70 br i1 %fcmp, label %one, label %two
71
72one:
73 store half 0xH3800, half addrspace(1)* %r
74 ret void
75
76two:
77 store half %b.val, half addrspace(1)* %r
78 ret void
79}
80
81; GCN-LABEL: {{^}}br_cc_f16_imm_b
82; GCN: v_mov_b32_e32 v[[B_F16:[0-9]+]], {{0x37ff|0x3800}}{{$}}
83; SI: v_cvt_f32_f16_e32 v[[B_F32:[0-9]+]], v[[B_F16]]
84; GCN: buffer_load_ushort v[[A_F16:[0-9]+]]
85
86; SI: v_cvt_f32_f16_e32 v[[A_F32:[0-9]+]], v[[A_F16]]
87; SI: v_cmp_nlt_f32_e32 vcc, v[[A_F32]], v[[B_F32]]
88; VI: v_cmp_nge_f16_e32 vcc, v[[B_F16]], v[[A_F16]]
89; GCN: s_cbranch_vccnz
90
91; GCN: one{{$}}
92; SI: v_cvt_f16_f32_e32 v[[A_F16:[0-9]+]], v[[A_F32]]
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000093
94; GCN: two{{$}}
95; VI: v_mov_b32_e32 v[[B_F16:[0-9]+]], 0x3800{{$}}
96; GCN: buffer_store_short v[[B_F16]]
97; GCN: s_endpgm
98define void @br_cc_f16_imm_b(
99 half addrspace(1)* %r,
100 half addrspace(1)* %a) {
101entry:
102 %a.val = load half, half addrspace(1)* %a
103 %fcmp = fcmp olt half %a.val, 0xH3800
104 br i1 %fcmp, label %one, label %two
105
106one:
107 store half %a.val, half addrspace(1)* %r
108 ret void
109
110two:
111 store half 0xH3800, half addrspace(1)* %r
112 ret void
113}