blob: b7a0c8738dfaf4b382e6b44e62a2c16df6071572 [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
Matthias Braundbcf9e22017-03-02 00:35:08 +00008; SI-DAG: v_cvt_f32_f16_e32 v[[A_F32:[0-9]+]], v[[A_F16]]
9; SI-DAG: v_cvt_f32_f16_e32 v[[B_F32:[0-9]+]], v[[B_F16]]
10; SI: v_cmp_nlt_f32_e32 vcc, v[[B_F32]], v[[A_F32]]
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000011; VI: v_cmp_nlt_f16_e32 vcc, v[[A_F16]], v[[B_F16]]
12; GCN: s_cbranch_vccnz
13
14; GCN: one{{$}}
Matthias Braundbcf9e22017-03-02 00:35:08 +000015; SI: v_cvt_f16_f32_e32 v[[A_F16:[0-9]+]], v[[B_F32]]
16; GCN: buffer_store_short
17; GCN: s_endpgm
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000018
19; GCN: two{{$}}
Matthias Braundbcf9e22017-03-02 00:35:08 +000020; SI: v_cvt_f16_f32_e32 v[[B_F16:[0-9]+]], v[[A_F32]]
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000021; GCN: buffer_store_short v[[B_F16]]
22; GCN: s_endpgm
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000023define amdgpu_kernel void @br_cc_f16(
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000024 half addrspace(1)* %r,
25 half addrspace(1)* %a,
26 half addrspace(1)* %b) {
27entry:
28 %a.val = load half, half addrspace(1)* %a
29 %b.val = load half, half addrspace(1)* %b
30 %fcmp = fcmp olt half %a.val, %b.val
31 br i1 %fcmp, label %one, label %two
32
33one:
34 store half %a.val, half addrspace(1)* %r
35 ret void
36
37two:
38 store half %b.val, half addrspace(1)* %r
39 ret void
40}
41
Matt Arsenault0c687392017-01-30 16:57:41 +000042; GCN-LABEL: {{^}}br_cc_f16_imm_a:
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000043; GCN: buffer_load_ushort v[[B_F16:[0-9]+]]
44
45; SI: v_cvt_f32_f16_e32 v[[B_F32:[0-9]+]], v[[B_F16]]
Matt Arsenault0c687392017-01-30 16:57:41 +000046; SI: v_cmp_nlt_f32_e32 vcc, 0.5, v[[B_F32]]
47; SI: s_cbranch_vccnz
Matt Arsenaulte96d0372016-12-08 20:14:46 +000048
Matt Arsenault4bd72362016-12-10 00:39:12 +000049; VI: v_cmp_nlt_f16_e32 vcc, 0.5, v[[B_F16]]
Matt Arsenaultad55ee52016-12-06 01:02:51 +000050; VI: s_cbranch_vccnz
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000051
Matt Arsenault0c687392017-01-30 16:57:41 +000052; GCN: one{{$}}
Matt Arsenaultad55ee52016-12-06 01:02:51 +000053; VI: v_mov_b32_e32 v[[A_F16:[0-9]+]], 0x380{{0|1}}{{$}}
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000054
Matt Arsenault0c687392017-01-30 16:57:41 +000055; SI: buffer_store_short v[[A_F16]]
56; SI: s_endpgm
57
58
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000059; GCN: two{{$}}
60; SI: v_cvt_f16_f32_e32 v[[B_F16:[0-9]+]], v[[B_F32]]
Matt Arsenaultad55ee52016-12-06 01:02:51 +000061
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000062define amdgpu_kernel void @br_cc_f16_imm_a(
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000063 half addrspace(1)* %r,
64 half addrspace(1)* %b) {
65entry:
66 %b.val = load half, half addrspace(1)* %b
67 %fcmp = fcmp olt half 0xH3800, %b.val
68 br i1 %fcmp, label %one, label %two
69
70one:
71 store half 0xH3800, half addrspace(1)* %r
72 ret void
73
74two:
75 store half %b.val, half addrspace(1)* %r
76 ret void
77}
78
Matt Arsenault0c687392017-01-30 16:57:41 +000079; GCN-LABEL: {{^}}br_cc_f16_imm_b:
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000080; GCN: buffer_load_ushort v[[A_F16:[0-9]+]]
81
82; SI: v_cvt_f32_f16_e32 v[[A_F32:[0-9]+]], v[[A_F16]]
Matt Arsenault0c687392017-01-30 16:57:41 +000083; SI: v_cmp_ngt_f32_e32 vcc, 0.5, v[[A_F32]]
84
Matt Arsenault4bd72362016-12-10 00:39:12 +000085; VI: v_cmp_ngt_f16_e32 vcc, 0.5, v[[A_F16]]
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000086; GCN: s_cbranch_vccnz
87
88; GCN: one{{$}}
89; SI: v_cvt_f16_f32_e32 v[[A_F16:[0-9]+]], v[[A_F32]]
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000090
91; GCN: two{{$}}
92; VI: v_mov_b32_e32 v[[B_F16:[0-9]+]], 0x3800{{$}}
93; GCN: buffer_store_short v[[B_F16]]
94; GCN: s_endpgm
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000095define amdgpu_kernel void @br_cc_f16_imm_b(
Konstantin Zhuravlyov662e01d2016-11-17 03:49:01 +000096 half addrspace(1)* %r,
97 half addrspace(1)* %a) {
98entry:
99 %a.val = load half, half addrspace(1)* %a
100 %fcmp = fcmp olt half %a.val, 0xH3800
101 br i1 %fcmp, label %one, label %two
102
103one:
104 store half %a.val, half addrspace(1)* %r
105 ret void
106
107two:
108 store half 0xH3800, half addrspace(1)* %r
109 ret void
110}