blob: 37bedb697f02ef41d783b041f116df6d7a4e2b91 [file] [log] [blame]
Nicolai Haehnleca4a3292018-12-06 14:33:40 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=amdgcn-amd-mesa3d -mcpu=fiji -verify-machineinstrs | FileCheck -check-prefix=VI %s
3; RUN: llc < %s -mtriple=amdgcn-amd-mesa3d -mcpu=gfx900 -verify-machineinstrs | FileCheck -check-prefix=GFX9 %s
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +00004; RUN: llc < %s -mtriple=amdgcn-amd-mesa3d -mcpu=gfx1010 -verify-machineinstrs | FileCheck -check-prefix=GFX10 %s
Nicolai Haehnleca4a3292018-12-06 14:33:40 +00005
6; ===================================================================================
7; V_ADD_LSHL_U32
8; ===================================================================================
9
10define amdgpu_ps float @add_shl(i32 %a, i32 %b, i32 %c) {
11; VI-LABEL: add_shl:
12; VI: ; %bb.0:
13; VI-NEXT: v_add_u32_e32 v0, vcc, v0, v1
14; VI-NEXT: v_lshlrev_b32_e32 v0, v2, v0
15; VI-NEXT: ; return to shader part epilog
16;
17; GFX9-LABEL: add_shl:
18; GFX9: ; %bb.0:
19; GFX9-NEXT: v_add_lshl_u32 v0, v0, v1, v2
20; GFX9-NEXT: ; return to shader part epilog
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +000021;
22; GFX10-LABEL: add_shl:
23; GFX10: ; %bb.0:
24; GFX10-NEXT: v_add_lshl_u32 v0, v0, v1, v2
Stanislav Mekhanoshin0846c122019-06-20 15:08:34 +000025; GFX10-NEXT: ; implicit-def: $vcc_hi
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +000026; GFX10-NEXT: ; return to shader part epilog
Nicolai Haehnleca4a3292018-12-06 14:33:40 +000027 %x = add i32 %a, %b
28 %result = shl i32 %x, %c
29 %bc = bitcast i32 %result to float
30 ret float %bc
31}
32
33define amdgpu_ps float @add_shl_vgpr_c(i32 inreg %a, i32 inreg %b, i32 %c) {
34; VI-LABEL: add_shl_vgpr_c:
35; VI: ; %bb.0:
36; VI-NEXT: s_add_i32 s2, s2, s3
37; VI-NEXT: v_lshlrev_b32_e64 v0, v0, s2
38; VI-NEXT: ; return to shader part epilog
39;
40; GFX9-LABEL: add_shl_vgpr_c:
41; GFX9: ; %bb.0:
42; GFX9-NEXT: s_add_i32 s2, s2, s3
43; GFX9-NEXT: v_lshlrev_b32_e64 v0, v0, s2
44; GFX9-NEXT: ; return to shader part epilog
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +000045;
46; GFX10-LABEL: add_shl_vgpr_c:
47; GFX10: ; %bb.0:
48; GFX10-NEXT: v_add_lshl_u32 v0, s2, s3, v0
Stanislav Mekhanoshin0846c122019-06-20 15:08:34 +000049; GFX10-NEXT: ; implicit-def: $vcc_hi
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +000050; GFX10-NEXT: ; return to shader part epilog
Nicolai Haehnleca4a3292018-12-06 14:33:40 +000051 %x = add i32 %a, %b
52 %result = shl i32 %x, %c
53 %bc = bitcast i32 %result to float
54 ret float %bc
55}
56
57define amdgpu_ps float @add_shl_vgpr_ac(i32 %a, i32 inreg %b, i32 %c) {
58; VI-LABEL: add_shl_vgpr_ac:
59; VI: ; %bb.0:
60; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v0
61; VI-NEXT: v_lshlrev_b32_e32 v0, v1, v0
62; VI-NEXT: ; return to shader part epilog
63;
64; GFX9-LABEL: add_shl_vgpr_ac:
65; GFX9: ; %bb.0:
66; GFX9-NEXT: v_add_lshl_u32 v0, v0, s2, v1
67; GFX9-NEXT: ; return to shader part epilog
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +000068;
69; GFX10-LABEL: add_shl_vgpr_ac:
70; GFX10: ; %bb.0:
71; GFX10-NEXT: v_add_lshl_u32 v0, v0, s2, v1
Stanislav Mekhanoshin0846c122019-06-20 15:08:34 +000072; GFX10-NEXT: ; implicit-def: $vcc_hi
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +000073; GFX10-NEXT: ; return to shader part epilog
Nicolai Haehnleca4a3292018-12-06 14:33:40 +000074 %x = add i32 %a, %b
75 %result = shl i32 %x, %c
76 %bc = bitcast i32 %result to float
77 ret float %bc
78}
79
80define amdgpu_ps float @add_shl_vgpr_const(i32 %a, i32 %b) {
81; VI-LABEL: add_shl_vgpr_const:
82; VI: ; %bb.0:
83; VI-NEXT: v_add_u32_e32 v0, vcc, v0, v1
84; VI-NEXT: v_lshlrev_b32_e32 v0, 9, v0
85; VI-NEXT: ; return to shader part epilog
86;
87; GFX9-LABEL: add_shl_vgpr_const:
88; GFX9: ; %bb.0:
89; GFX9-NEXT: v_add_lshl_u32 v0, v0, v1, 9
90; GFX9-NEXT: ; return to shader part epilog
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +000091;
92; GFX10-LABEL: add_shl_vgpr_const:
93; GFX10: ; %bb.0:
94; GFX10-NEXT: v_add_lshl_u32 v0, v0, v1, 9
Stanislav Mekhanoshin0846c122019-06-20 15:08:34 +000095; GFX10-NEXT: ; implicit-def: $vcc_hi
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +000096; GFX10-NEXT: ; return to shader part epilog
Nicolai Haehnleca4a3292018-12-06 14:33:40 +000097 %x = add i32 %a, %b
98 %result = shl i32 %x, 9
99 %bc = bitcast i32 %result to float
100 ret float %bc
101}
102
103define amdgpu_ps float @add_shl_vgpr_const_inline_const(i32 %a) {
104; VI-LABEL: add_shl_vgpr_const_inline_const:
105; VI: ; %bb.0:
106; VI-NEXT: v_lshlrev_b32_e32 v0, 9, v0
107; VI-NEXT: v_add_u32_e32 v0, vcc, 0x7e800, v0
108; VI-NEXT: ; return to shader part epilog
109;
110; GFX9-LABEL: add_shl_vgpr_const_inline_const:
111; GFX9: ; %bb.0:
112; GFX9-NEXT: v_mov_b32_e32 v1, 0x7e800
113; GFX9-NEXT: v_lshl_add_u32 v0, v0, 9, v1
114; GFX9-NEXT: ; return to shader part epilog
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +0000115;
116; GFX10-LABEL: add_shl_vgpr_const_inline_const:
117; GFX10: ; %bb.0:
118; GFX10-NEXT: v_lshl_add_u32 v0, v0, 9, 0x7e800
Stanislav Mekhanoshin0846c122019-06-20 15:08:34 +0000119; GFX10-NEXT: ; implicit-def: $vcc_hi
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +0000120; GFX10-NEXT: ; return to shader part epilog
Nicolai Haehnleca4a3292018-12-06 14:33:40 +0000121 %x = add i32 %a, 1012
122 %result = shl i32 %x, 9
123 %bc = bitcast i32 %result to float
124 ret float %bc
125}
126
127; TODO: Non-optimal code generation because SelectionDAG combines
128; (shl (add x, CONST), y) ---> (add (shl x, y), CONST').
129;
130define amdgpu_ps float @add_shl_vgpr_inline_const_x2(i32 %a) {
131; VI-LABEL: add_shl_vgpr_inline_const_x2:
132; VI: ; %bb.0:
133; VI-NEXT: v_lshlrev_b32_e32 v0, 9, v0
134; VI-NEXT: v_add_u32_e32 v0, vcc, 0x600, v0
135; VI-NEXT: ; return to shader part epilog
136;
137; GFX9-LABEL: add_shl_vgpr_inline_const_x2:
138; GFX9: ; %bb.0:
139; GFX9-NEXT: v_mov_b32_e32 v1, 0x600
140; GFX9-NEXT: v_lshl_add_u32 v0, v0, 9, v1
141; GFX9-NEXT: ; return to shader part epilog
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +0000142;
143; GFX10-LABEL: add_shl_vgpr_inline_const_x2:
144; GFX10: ; %bb.0:
145; GFX10-NEXT: v_lshl_add_u32 v0, v0, 9, 0x600
Stanislav Mekhanoshin0846c122019-06-20 15:08:34 +0000146; GFX10-NEXT: ; implicit-def: $vcc_hi
Stanislav Mekhanoshin64196852019-05-10 00:09:01 +0000147; GFX10-NEXT: ; return to shader part epilog
Nicolai Haehnleca4a3292018-12-06 14:33:40 +0000148 %x = add i32 %a, 3
149 %result = shl i32 %x, 9
150 %bc = bitcast i32 %result to float
151 ret float %bc
152}