blob: 4ae15e8ea45e7f3fb5556951eddf14be1924858e [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
Matt Arsenault7aad8fd2017-01-24 22:02:15 +00002; RUN: llc -march=amdgcn -mcpu=fiji -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +00003
Matt Arsenault0c687392017-01-30 16:57:41 +00004; GCN-LABEL: {{^}}br_cc_f16:
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +00005; 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
Matt Arsenault0c687392017-01-30 16:57:41 +000043; GCN-LABEL: {{^}}br_cc_f16_imm_a:
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000044; GCN: buffer_load_ushort v[[B_F16:[0-9]+]]
45
46; SI: v_cvt_f32_f16_e32 v[[B_F32:[0-9]+]], v[[B_F16]]
Matt Arsenault0c687392017-01-30 16:57:41 +000047; SI: v_cmp_nlt_f32_e32 vcc, 0.5, v[[B_F32]]
48; SI: s_cbranch_vccnz
Matt Arsenaulte96d0372016-12-08 20:14:46 +000049
Matt Arsenault4bd72362016-12-10 00:39:12 +000050; VI: v_cmp_nlt_f16_e32 vcc, 0.5, v[[B_F16]]
Matt Arsenaultad55ee52016-12-06 01:02:51 +000051; VI: s_cbranch_vccnz
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000052
Matt Arsenault0c687392017-01-30 16:57:41 +000053; GCN: one{{$}}
Matt Arsenaultad55ee52016-12-06 01:02:51 +000054; VI: v_mov_b32_e32 v[[A_F16:[0-9]+]], 0x380{{0|1}}{{$}}
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000055
Matt Arsenault0c687392017-01-30 16:57:41 +000056; SI: buffer_store_short v[[A_F16]]
57; SI: s_endpgm
58
59
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000060; GCN: two{{$}}
61; SI: v_cvt_f16_f32_e32 v[[B_F16:[0-9]+]], v[[B_F32]]
Matt Arsenaultad55ee52016-12-06 01:02:51 +000062
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000063define void @br_cc_f16_imm_a(
64 half addrspace(1)* %r,
65 half addrspace(1)* %b) {
66entry:
67 %b.val = load half, half addrspace(1)* %b
68 %fcmp = fcmp olt half 0xH3800, %b.val
69 br i1 %fcmp, label %one, label %two
70
71one:
72 store half 0xH3800, half addrspace(1)* %r
73 ret void
74
75two:
76 store half %b.val, half addrspace(1)* %r
77 ret void
78}
79
Matt Arsenault0c687392017-01-30 16:57:41 +000080; GCN-LABEL: {{^}}br_cc_f16_imm_b:
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000081; GCN: buffer_load_ushort v[[A_F16:[0-9]+]]
82
83; SI: v_cvt_f32_f16_e32 v[[A_F32:[0-9]+]], v[[A_F16]]
Matt Arsenault0c687392017-01-30 16:57:41 +000084; SI: v_cmp_ngt_f32_e32 vcc, 0.5, v[[A_F32]]
85
Matt Arsenault4bd72362016-12-10 00:39:12 +000086; VI: v_cmp_ngt_f16_e32 vcc, 0.5, v[[A_F16]]
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000087; GCN: s_cbranch_vccnz
88
89; GCN: one{{$}}
90; SI: v_cvt_f16_f32_e32 v[[A_F16:[0-9]+]], v[[A_F32]]
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000091
92; GCN: two{{$}}
93; VI: v_mov_b32_e32 v[[B_F16:[0-9]+]], 0x3800{{$}}
94; GCN: buffer_store_short v[[B_F16]]
95; GCN: s_endpgm
96define void @br_cc_f16_imm_b(
97 half addrspace(1)* %r,
98 half addrspace(1)* %a) {
99entry:
100 %a.val = load half, half addrspace(1)* %a
101 %fcmp = fcmp olt half %a.val, 0xH3800
102 br i1 %fcmp, label %one, label %two
103
104one:
105 store half %a.val, half addrspace(1)* %r
106 ret void
107
108two:
109 store half 0xH3800, half addrspace(1)* %r
110 ret void
111}