1*4e707201SJay Foad; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -show-mc-encoding < %s | FileCheck -check-prefixes=GFX9,NOT-GFX12 %s 2*4e707201SJay Foad; RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -show-mc-encoding < %s | FileCheck -check-prefixes=GFX10,NOT-GFX12 %s 3*4e707201SJay Foad; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -show-mc-encoding < %s | FileCheck -check-prefixes=GFX11,GFX1100,NOT-GFX12 %s 4*4e707201SJay Foad; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -show-mc-encoding < %s | FileCheck -check-prefixes=GFX11,GFX1150,NOT-GFX12 %s 5*4e707201SJay Foad; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -show-mc-encoding < %s | FileCheck -check-prefixes=GFX1200 %s 64b1702e8SMatt Arsenault 74b1702e8SMatt Arsenaultdeclare float @llvm.fabs.f32(float) 84b1702e8SMatt Arsenaultdeclare float @llvm.fma.f32(float, float, float) 94b1702e8SMatt Arsenault 104b1702e8SMatt Arsenaultdefine float @v_mul_f32_vop2(float %x, float %y) { 114b1702e8SMatt Arsenault; GFX9-LABEL: v_mul_f32_vop2: 124b1702e8SMatt Arsenault; GFX9: ; %bb.0: 134b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 144b1702e8SMatt Arsenault; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1 ; encoding: [0x00,0x03,0x00,0x0a] 154b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 164b1702e8SMatt Arsenault; 174b1702e8SMatt Arsenault; GFX10-LABEL: v_mul_f32_vop2: 184b1702e8SMatt Arsenault; GFX10: ; %bb.0: 194b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 204b1702e8SMatt Arsenault; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1 ; encoding: [0x00,0x03,0x00,0x10] 214b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 224b1702e8SMatt Arsenault; 234b1702e8SMatt Arsenault; GFX11-LABEL: v_mul_f32_vop2: 244b1702e8SMatt Arsenault; GFX11: ; %bb.0: 254b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 264b1702e8SMatt Arsenault; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1 ; encoding: [0x00,0x03,0x00,0x10] 274b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 28*4e707201SJay Foad; 29*4e707201SJay Foad; GFX1200-LABEL: v_mul_f32_vop2: 30*4e707201SJay Foad; GFX1200: ; %bb.0: 31*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 32*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 33*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 34*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 35*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 36*4e707201SJay Foad; GFX1200-NEXT: v_mul_f32_e32 v0, v0, v1 ; encoding: [0x00,0x03,0x00,0x10] 37*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 384b1702e8SMatt Arsenault %mul = fmul float %x, %y 394b1702e8SMatt Arsenault ret float %mul 404b1702e8SMatt Arsenault} 41*4e707201SJay Foad; NOT-GFX12: codeLenInByte = 12 42*4e707201SJay Foad; GFX1200: codeLenInByte = 28 434b1702e8SMatt Arsenault 444b1702e8SMatt Arsenaultdefine float @v_mul_f32_vop2_inline_imm(float %x) { 454b1702e8SMatt Arsenault; GFX9-LABEL: v_mul_f32_vop2_inline_imm: 464b1702e8SMatt Arsenault; GFX9: ; %bb.0: 474b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 484b1702e8SMatt Arsenault; GFX9-NEXT: v_mul_f32_e32 v0, 4.0, v0 ; encoding: [0xf6,0x00,0x00,0x0a] 494b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 504b1702e8SMatt Arsenault; 514b1702e8SMatt Arsenault; GFX10-LABEL: v_mul_f32_vop2_inline_imm: 524b1702e8SMatt Arsenault; GFX10: ; %bb.0: 534b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 544b1702e8SMatt Arsenault; GFX10-NEXT: v_mul_f32_e32 v0, 4.0, v0 ; encoding: [0xf6,0x00,0x00,0x10] 554b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 564b1702e8SMatt Arsenault; 574b1702e8SMatt Arsenault; GFX11-LABEL: v_mul_f32_vop2_inline_imm: 584b1702e8SMatt Arsenault; GFX11: ; %bb.0: 594b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 604b1702e8SMatt Arsenault; GFX11-NEXT: v_mul_f32_e32 v0, 4.0, v0 ; encoding: [0xf6,0x00,0x00,0x10] 614b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 62*4e707201SJay Foad; 63*4e707201SJay Foad; GFX1200-LABEL: v_mul_f32_vop2_inline_imm: 64*4e707201SJay Foad; GFX1200: ; %bb.0: 65*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 66*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 67*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 68*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 69*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 70*4e707201SJay Foad; GFX1200-NEXT: v_mul_f32_e32 v0, 4.0, v0 ; encoding: [0xf6,0x00,0x00,0x10] 71*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 724b1702e8SMatt Arsenault %mul = fmul float %x, 4.0 734b1702e8SMatt Arsenault ret float %mul 744b1702e8SMatt Arsenault} 75*4e707201SJay Foad; NOT-GFX12: codeLenInByte = 12 76*4e707201SJay Foad; GFX1200: codeLenInByte = 28 774b1702e8SMatt Arsenault 784b1702e8SMatt Arsenaultdefine float @v_mul_f32_vop2_literal(float %x) { 794b1702e8SMatt Arsenault; GFX9-LABEL: v_mul_f32_vop2_literal: 804b1702e8SMatt Arsenault; GFX9: ; %bb.0: 814b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 824b1702e8SMatt Arsenault; GFX9-NEXT: v_mul_f32_e32 v0, 0x42f60000, v0 ; encoding: [0xff,0x00,0x00,0x0a,0x00,0x00,0xf6,0x42] 834b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 844b1702e8SMatt Arsenault; 854b1702e8SMatt Arsenault; GFX10-LABEL: v_mul_f32_vop2_literal: 864b1702e8SMatt Arsenault; GFX10: ; %bb.0: 874b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 884b1702e8SMatt Arsenault; GFX10-NEXT: v_mul_f32_e32 v0, 0x42f60000, v0 ; encoding: [0xff,0x00,0x00,0x10,0x00,0x00,0xf6,0x42] 894b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 904b1702e8SMatt Arsenault; 914b1702e8SMatt Arsenault; GFX11-LABEL: v_mul_f32_vop2_literal: 924b1702e8SMatt Arsenault; GFX11: ; %bb.0: 934b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 944b1702e8SMatt Arsenault; GFX11-NEXT: v_mul_f32_e32 v0, 0x42f60000, v0 ; encoding: [0xff,0x00,0x00,0x10,0x00,0x00,0xf6,0x42] 954b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 96*4e707201SJay Foad; 97*4e707201SJay Foad; GFX1200-LABEL: v_mul_f32_vop2_literal: 98*4e707201SJay Foad; GFX1200: ; %bb.0: 99*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 100*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 101*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 102*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 103*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 104*4e707201SJay Foad; GFX1200-NEXT: v_mul_f32_e32 v0, 0x42f60000, v0 ; encoding: [0xff,0x00,0x00,0x10,0x00,0x00,0xf6,0x42] 105*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 1064b1702e8SMatt Arsenault %mul = fmul float %x, 123.0 1074b1702e8SMatt Arsenault ret float %mul 1084b1702e8SMatt Arsenault} 109*4e707201SJay Foad; NOT-GFX12: codeLenInByte = 16 110*4e707201SJay Foad; GFX1200: codeLenInByte = 32 1114b1702e8SMatt Arsenault 1124b1702e8SMatt Arsenaultdefine float @v_mul_f32_vop3_src_mods(float %x, float %y) { 1134b1702e8SMatt Arsenault; GFX9-LABEL: v_mul_f32_vop3_src_mods: 1144b1702e8SMatt Arsenault; GFX9: ; %bb.0: 1154b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 1164b1702e8SMatt Arsenault; GFX9-NEXT: v_mul_f32_e64 v0, |v0|, v1 ; encoding: [0x00,0x01,0x05,0xd1,0x00,0x03,0x02,0x00] 1174b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 1184b1702e8SMatt Arsenault; 1194b1702e8SMatt Arsenault; GFX10-LABEL: v_mul_f32_vop3_src_mods: 1204b1702e8SMatt Arsenault; GFX10: ; %bb.0: 1214b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 1224b1702e8SMatt Arsenault; GFX10-NEXT: v_mul_f32_e64 v0, |v0|, v1 ; encoding: [0x00,0x01,0x08,0xd5,0x00,0x03,0x02,0x00] 1234b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 1244b1702e8SMatt Arsenault; 1254b1702e8SMatt Arsenault; GFX11-LABEL: v_mul_f32_vop3_src_mods: 1264b1702e8SMatt Arsenault; GFX11: ; %bb.0: 1274b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 1284b1702e8SMatt Arsenault; GFX11-NEXT: v_mul_f32_e64 v0, |v0|, v1 ; encoding: [0x00,0x01,0x08,0xd5,0x00,0x03,0x02,0x00] 1294b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 130*4e707201SJay Foad; 131*4e707201SJay Foad; GFX1200-LABEL: v_mul_f32_vop3_src_mods: 132*4e707201SJay Foad; GFX1200: ; %bb.0: 133*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 134*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 135*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 136*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 137*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 138*4e707201SJay Foad; GFX1200-NEXT: v_mul_f32_e64 v0, |v0|, v1 ; encoding: [0x00,0x01,0x08,0xd5,0x00,0x03,0x02,0x00] 139*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 1404b1702e8SMatt Arsenault %fabs.x = call float @llvm.fabs.f32(float %x) 1414b1702e8SMatt Arsenault %mul = fmul float %fabs.x, %y 1424b1702e8SMatt Arsenault ret float %mul 1434b1702e8SMatt Arsenault} 144*4e707201SJay Foad; NOT-GFX12: codeLenInByte = 16 145*4e707201SJay Foad; GFX1200: codeLenInByte = 32 1464b1702e8SMatt Arsenault 1474b1702e8SMatt Arsenaultdefine float @v_mul_f32_vop3_src_mods_inline_imm(float %x, float %y) { 1484b1702e8SMatt Arsenault; GFX9-LABEL: v_mul_f32_vop3_src_mods_inline_imm: 1494b1702e8SMatt Arsenault; GFX9: ; %bb.0: 1504b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 1514b1702e8SMatt Arsenault; GFX9-NEXT: v_mul_f32_e64 v0, |v0|, 4.0 ; encoding: [0x00,0x01,0x05,0xd1,0x00,0xed,0x01,0x00] 1524b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 1534b1702e8SMatt Arsenault; 1544b1702e8SMatt Arsenault; GFX10-LABEL: v_mul_f32_vop3_src_mods_inline_imm: 1554b1702e8SMatt Arsenault; GFX10: ; %bb.0: 1564b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 1574b1702e8SMatt Arsenault; GFX10-NEXT: v_mul_f32_e64 v0, |v0|, 4.0 ; encoding: [0x00,0x01,0x08,0xd5,0x00,0xed,0x01,0x00] 1584b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 1594b1702e8SMatt Arsenault; 1604b1702e8SMatt Arsenault; GFX11-LABEL: v_mul_f32_vop3_src_mods_inline_imm: 1614b1702e8SMatt Arsenault; GFX11: ; %bb.0: 1624b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 1634b1702e8SMatt Arsenault; GFX11-NEXT: v_mul_f32_e64 v0, |v0|, 4.0 ; encoding: [0x00,0x01,0x08,0xd5,0x00,0xed,0x01,0x00] 1644b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 165*4e707201SJay Foad; 166*4e707201SJay Foad; GFX1200-LABEL: v_mul_f32_vop3_src_mods_inline_imm: 167*4e707201SJay Foad; GFX1200: ; %bb.0: 168*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 169*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 170*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 171*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 172*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 173*4e707201SJay Foad; GFX1200-NEXT: v_mul_f32_e64 v0, |v0|, 4.0 ; encoding: [0x00,0x01,0x08,0xd5,0x00,0xed,0x01,0x00] 174*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 1754b1702e8SMatt Arsenault %fabs.x = call float @llvm.fabs.f32(float %x) 1764b1702e8SMatt Arsenault %mul = fmul float %fabs.x, 4.0 1774b1702e8SMatt Arsenault ret float %mul 1784b1702e8SMatt Arsenault} 1794b1702e8SMatt Arsenault 180*4e707201SJay Foad; NOT-GFX12: codeLenInByte = 16 181*4e707201SJay Foad; GFX1200: codeLenInByte = 32 1824b1702e8SMatt Arsenault 1834b1702e8SMatt Arsenaultdefine float @v_mul_f32_vop3_src_mods_literal(float %x, float %y) { 1844b1702e8SMatt Arsenault; GFX9-LABEL: v_mul_f32_vop3_src_mods_literal: 1854b1702e8SMatt Arsenault; GFX9: ; %bb.0: 1864b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 1874b1702e8SMatt Arsenault; GFX9-NEXT: s_mov_b32 s4, 0x42f60000 ; encoding: [0xff,0x00,0x84,0xbe,0x00,0x00,0xf6,0x42] 1884b1702e8SMatt Arsenault; GFX9-NEXT: v_mul_f32_e64 v0, |v0|, s4 ; encoding: [0x00,0x01,0x05,0xd1,0x00,0x09,0x00,0x00] 1894b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 1904b1702e8SMatt Arsenault; 1914b1702e8SMatt Arsenault; GFX10-LABEL: v_mul_f32_vop3_src_mods_literal: 1924b1702e8SMatt Arsenault; GFX10: ; %bb.0: 1934b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 1944b1702e8SMatt Arsenault; GFX10-NEXT: v_mul_f32_e64 v0, 0x42f60000, |v0| ; encoding: [0x00,0x02,0x08,0xd5,0xff,0x00,0x02,0x00,0x00,0x00,0xf6,0x42] 1954b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 1964b1702e8SMatt Arsenault; 1974b1702e8SMatt Arsenault; GFX11-LABEL: v_mul_f32_vop3_src_mods_literal: 1984b1702e8SMatt Arsenault; GFX11: ; %bb.0: 1994b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 2004b1702e8SMatt Arsenault; GFX11-NEXT: v_mul_f32_e64 v0, 0x42f60000, |v0| ; encoding: [0x00,0x02,0x08,0xd5,0xff,0x00,0x02,0x00,0x00,0x00,0xf6,0x42] 2014b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 202*4e707201SJay Foad; 203*4e707201SJay Foad; GFX1200-LABEL: v_mul_f32_vop3_src_mods_literal: 204*4e707201SJay Foad; GFX1200: ; %bb.0: 205*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 206*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 207*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 208*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 209*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 210*4e707201SJay Foad; GFX1200-NEXT: v_mul_f32_e64 v0, 0x42f60000, |v0| ; encoding: [0x00,0x02,0x08,0xd5,0xff,0x00,0x02,0x00,0x00,0x00,0xf6,0x42] 211*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 2124b1702e8SMatt Arsenault %fabs.x = call float @llvm.fabs.f32(float %x) 2134b1702e8SMatt Arsenault %mul = fmul float %fabs.x, 123.0 2144b1702e8SMatt Arsenault ret float %mul 2154b1702e8SMatt Arsenault} 2164b1702e8SMatt Arsenault 2174b1702e8SMatt Arsenault; GFX9: codeLenInByte = 24 2184b1702e8SMatt Arsenault; GFX10: codeLenInByte = 20 2191e5359c6SMirko Brkusanin; GFX11: codeLenInByte = 20 220*4e707201SJay Foad; GFX1200: codeLenInByte = 36 2214b1702e8SMatt Arsenault 2224b1702e8SMatt Arsenaultdefine float @v_mul_f32_vop2_frame_index(float %x) { 2234b1702e8SMatt Arsenault; GFX9-LABEL: v_mul_f32_vop2_frame_index: 2244b1702e8SMatt Arsenault; GFX9: ; %bb.0: 2254b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 2264b1702e8SMatt Arsenault; GFX9-NEXT: v_lshrrev_b32_e64 v1, 6, s32 ; encoding: [0x01,0x00,0x10,0xd1,0x86,0x40,0x00,0x00] 2274b1702e8SMatt Arsenault; GFX9-NEXT: v_mul_f32_e32 v0, v1, v0 ; encoding: [0x01,0x01,0x00,0x0a] 2284b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 2294b1702e8SMatt Arsenault; 2304b1702e8SMatt Arsenault; GFX10-LABEL: v_mul_f32_vop2_frame_index: 2314b1702e8SMatt Arsenault; GFX10: ; %bb.0: 2324b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 2334b1702e8SMatt Arsenault; GFX10-NEXT: v_lshrrev_b32_e64 v1, 5, s32 ; encoding: [0x01,0x00,0x16,0xd5,0x85,0x40,0x00,0x00] 2344b1702e8SMatt Arsenault; GFX10-NEXT: v_mul_f32_e32 v0, v1, v0 ; encoding: [0x01,0x01,0x00,0x10] 2354b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 2364b1702e8SMatt Arsenault; 2374b1702e8SMatt Arsenault; GFX11-LABEL: v_mul_f32_vop2_frame_index: 2384b1702e8SMatt Arsenault; GFX11: ; %bb.0: 2394b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 2404b1702e8SMatt Arsenault; GFX11-NEXT: v_mul_f32_e32 v0, s32, v0 ; encoding: [0x20,0x00,0x00,0x10] 2414b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 242*4e707201SJay Foad; 243*4e707201SJay Foad; GFX1200-LABEL: v_mul_f32_vop2_frame_index: 244*4e707201SJay Foad; GFX1200: ; %bb.0: 245*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 246*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 247*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 248*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 249*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 250*4e707201SJay Foad; GFX1200-NEXT: v_mul_f32_e32 v0, s32, v0 ; encoding: [0x20,0x00,0x00,0x10] 251*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 2524b1702e8SMatt Arsenault %alloca = alloca i32, addrspace(5) 2534b1702e8SMatt Arsenault %ptrtoint = ptrtoint ptr addrspace(5) %alloca to i32 2544b1702e8SMatt Arsenault %cast = bitcast i32 %ptrtoint to float 2554b1702e8SMatt Arsenault %mul = fmul float %x, %cast 2564b1702e8SMatt Arsenault ret float %mul 2574b1702e8SMatt Arsenault} 2584b1702e8SMatt Arsenault 2594b1702e8SMatt Arsenault; GFX9: codeLenInByte = 20 2604b1702e8SMatt Arsenault; GFX10: codeLenInByte = 20 2614b1702e8SMatt Arsenault; GFX11: codeLenInByte = 12 262*4e707201SJay Foad; GFX1200: codeLenInByte = 28 2634b1702e8SMatt Arsenault 2644b1702e8SMatt Arsenaultdefine float @v_fma_f32(float %x, float %y, float %z) { 2654b1702e8SMatt Arsenault; GFX9-LABEL: v_fma_f32: 2664b1702e8SMatt Arsenault; GFX9: ; %bb.0: 2674b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 2684b1702e8SMatt Arsenault; GFX9-NEXT: v_fma_f32 v0, v0, v1, v2 ; encoding: [0x00,0x00,0xcb,0xd1,0x00,0x03,0x0a,0x04] 2694b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 2704b1702e8SMatt Arsenault; 2714b1702e8SMatt Arsenault; GFX10-LABEL: v_fma_f32: 2724b1702e8SMatt Arsenault; GFX10: ; %bb.0: 2734b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 2744b1702e8SMatt Arsenault; GFX10-NEXT: v_fma_f32 v0, v0, v1, v2 ; encoding: [0x00,0x00,0x4b,0xd5,0x00,0x03,0x0a,0x04] 2754b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 2764b1702e8SMatt Arsenault; 2774b1702e8SMatt Arsenault; GFX11-LABEL: v_fma_f32: 2784b1702e8SMatt Arsenault; GFX11: ; %bb.0: 2794b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 2804b1702e8SMatt Arsenault; GFX11-NEXT: v_fma_f32 v0, v0, v1, v2 ; encoding: [0x00,0x00,0x13,0xd6,0x00,0x03,0x0a,0x04] 2814b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 282*4e707201SJay Foad; 283*4e707201SJay Foad; GFX1200-LABEL: v_fma_f32: 284*4e707201SJay Foad; GFX1200: ; %bb.0: 285*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 286*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 287*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 288*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 289*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 290*4e707201SJay Foad; GFX1200-NEXT: v_fma_f32 v0, v0, v1, v2 ; encoding: [0x00,0x00,0x13,0xd6,0x00,0x03,0x0a,0x04] 291*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 2924b1702e8SMatt Arsenault %fma = call float @llvm.fma.f32(float %x, float %y, float %z) 2934b1702e8SMatt Arsenault ret float %fma 2944b1702e8SMatt Arsenault} 2954b1702e8SMatt Arsenault 296*4e707201SJay Foad; NOT-GFX12: codeLenInByte = 16 297*4e707201SJay Foad; GFX1200: codeLenInByte = 32 2984b1702e8SMatt Arsenault 2994b1702e8SMatt Arsenaultdefine float @v_fma_f32_src_mods(float %x, float %y, float %z) { 3004b1702e8SMatt Arsenault; GFX9-LABEL: v_fma_f32_src_mods: 3014b1702e8SMatt Arsenault; GFX9: ; %bb.0: 3024b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 3034b1702e8SMatt Arsenault; GFX9-NEXT: v_fma_f32 v0, |v0|, v1, v2 ; encoding: [0x00,0x01,0xcb,0xd1,0x00,0x03,0x0a,0x04] 3044b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 3054b1702e8SMatt Arsenault; 3064b1702e8SMatt Arsenault; GFX10-LABEL: v_fma_f32_src_mods: 3074b1702e8SMatt Arsenault; GFX10: ; %bb.0: 3084b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 3094b1702e8SMatt Arsenault; GFX10-NEXT: v_fma_f32 v0, |v0|, v1, v2 ; encoding: [0x00,0x01,0x4b,0xd5,0x00,0x03,0x0a,0x04] 3104b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 3114b1702e8SMatt Arsenault; 3124b1702e8SMatt Arsenault; GFX11-LABEL: v_fma_f32_src_mods: 3134b1702e8SMatt Arsenault; GFX11: ; %bb.0: 3144b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 3154b1702e8SMatt Arsenault; GFX11-NEXT: v_fma_f32 v0, |v0|, v1, v2 ; encoding: [0x00,0x01,0x13,0xd6,0x00,0x03,0x0a,0x04] 3164b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 317*4e707201SJay Foad; 318*4e707201SJay Foad; GFX1200-LABEL: v_fma_f32_src_mods: 319*4e707201SJay Foad; GFX1200: ; %bb.0: 320*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 321*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 322*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 323*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 324*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 325*4e707201SJay Foad; GFX1200-NEXT: v_fma_f32 v0, |v0|, v1, v2 ; encoding: [0x00,0x01,0x13,0xd6,0x00,0x03,0x0a,0x04] 326*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 3274b1702e8SMatt Arsenault %fabs.x = call float @llvm.fabs.f32(float %x) 3284b1702e8SMatt Arsenault %fma = call float @llvm.fma.f32(float %fabs.x, float %y, float %z) 3294b1702e8SMatt Arsenault ret float %fma 3304b1702e8SMatt Arsenault} 3314b1702e8SMatt Arsenault 332*4e707201SJay Foad; NOT-GFX12: codeLenInByte = 16 333*4e707201SJay Foad; GFX1200: codeLenInByte = 32 3344b1702e8SMatt Arsenault 3354b1702e8SMatt Arsenaultdefine float @v_fmac_f32(float %x, float %y) { 3364b1702e8SMatt Arsenault; GFX9-LABEL: v_fmac_f32: 3374b1702e8SMatt Arsenault; GFX9: ; %bb.0: 3384b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 3394b1702e8SMatt Arsenault; GFX9-NEXT: v_fma_f32 v0, v0, v1, v0 ; encoding: [0x00,0x00,0xcb,0xd1,0x00,0x03,0x02,0x04] 3404b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 3414b1702e8SMatt Arsenault; 3424b1702e8SMatt Arsenault; GFX10-LABEL: v_fmac_f32: 3434b1702e8SMatt Arsenault; GFX10: ; %bb.0: 3444b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 3454b1702e8SMatt Arsenault; GFX10-NEXT: v_fmac_f32_e32 v0, v0, v1 ; encoding: [0x00,0x03,0x00,0x56] 3464b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 3474b1702e8SMatt Arsenault; 3484b1702e8SMatt Arsenault; GFX11-LABEL: v_fmac_f32: 3494b1702e8SMatt Arsenault; GFX11: ; %bb.0: 3504b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 3514b1702e8SMatt Arsenault; GFX11-NEXT: v_fmac_f32_e32 v0, v0, v1 ; encoding: [0x00,0x03,0x00,0x56] 3524b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 353*4e707201SJay Foad; 354*4e707201SJay Foad; GFX1200-LABEL: v_fmac_f32: 355*4e707201SJay Foad; GFX1200: ; %bb.0: 356*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 357*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 358*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 359*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 360*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 361*4e707201SJay Foad; GFX1200-NEXT: v_fmac_f32_e32 v0, v0, v1 ; encoding: [0x00,0x03,0x00,0x56] 362*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 3634b1702e8SMatt Arsenault %fma = call float @llvm.fma.f32(float %x, float %y, float %x) 3644b1702e8SMatt Arsenault ret float %fma 3654b1702e8SMatt Arsenault} 3664b1702e8SMatt Arsenault 3674b1702e8SMatt Arsenault; GFX9: codeLenInByte = 16 3684b1702e8SMatt Arsenault; GFX10: codeLenInByte = 12 3694b1702e8SMatt Arsenault; GFX11: codeLenInByte = 12 370*4e707201SJay Foad; GFX1200: codeLenInByte = 28 3714b1702e8SMatt Arsenault 3724b1702e8SMatt Arsenaultdefine float @v_fmaak_f32(float %x, float %y) { 3734b1702e8SMatt Arsenault; GFX9-LABEL: v_fmaak_f32: 3744b1702e8SMatt Arsenault; GFX9: ; %bb.0: 3754b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 3764b1702e8SMatt Arsenault; GFX9-NEXT: s_mov_b32 s4, 0x43800000 ; encoding: [0xff,0x00,0x84,0xbe,0x00,0x00,0x80,0x43] 3774b1702e8SMatt Arsenault; GFX9-NEXT: v_fma_f32 v0, v0, v1, s4 ; encoding: [0x00,0x00,0xcb,0xd1,0x00,0x03,0x12,0x00] 3784b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 3794b1702e8SMatt Arsenault; 3804b1702e8SMatt Arsenault; GFX10-LABEL: v_fmaak_f32: 3814b1702e8SMatt Arsenault; GFX10: ; %bb.0: 3824b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 3834b1702e8SMatt Arsenault; GFX10-NEXT: v_fmaak_f32 v0, v0, v1, 0x43800000 ; encoding: [0x00,0x03,0x00,0x5a,0x00,0x00,0x80,0x43] 3844b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 3854b1702e8SMatt Arsenault; 3864b1702e8SMatt Arsenault; GFX11-LABEL: v_fmaak_f32: 3874b1702e8SMatt Arsenault; GFX11: ; %bb.0: 3884b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 3894b1702e8SMatt Arsenault; GFX11-NEXT: v_fmaak_f32 v0, v0, v1, 0x43800000 ; encoding: [0x00,0x03,0x00,0x5a,0x00,0x00,0x80,0x43] 3904b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 391*4e707201SJay Foad; 392*4e707201SJay Foad; GFX1200-LABEL: v_fmaak_f32: 393*4e707201SJay Foad; GFX1200: ; %bb.0: 394*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 395*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 396*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 397*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 398*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 399*4e707201SJay Foad; GFX1200-NEXT: v_fmaak_f32 v0, v0, v1, 0x43800000 ; encoding: [0x00,0x03,0x00,0x5a,0x00,0x00,0x80,0x43] 400*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 4014b1702e8SMatt Arsenault %fma = call float @llvm.fma.f32(float %x, float %y, float 256.0) 4024b1702e8SMatt Arsenault ret float %fma 4034b1702e8SMatt Arsenault} 4044b1702e8SMatt Arsenault 4054b1702e8SMatt Arsenault; GFX9: codeLenInByte = 24 4064b1702e8SMatt Arsenault; GFX10: codeLenInByte = 16 4074b1702e8SMatt Arsenault; GFX11: codeLenInByte = 16 408*4e707201SJay Foad; GFX1200: codeLenInByte = 32 4094b1702e8SMatt Arsenault 4104b1702e8SMatt Arsenaultdefine float @v_fma_k_f32_src_mods(float %x, float %y) { 4114b1702e8SMatt Arsenault; GFX9-LABEL: v_fma_k_f32_src_mods: 4124b1702e8SMatt Arsenault; GFX9: ; %bb.0: 4134b1702e8SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 4144b1702e8SMatt Arsenault; GFX9-NEXT: s_mov_b32 s4, 0x43800000 ; encoding: [0xff,0x00,0x84,0xbe,0x00,0x00,0x80,0x43] 4154b1702e8SMatt Arsenault; GFX9-NEXT: v_fma_f32 v0, |v0|, v1, s4 ; encoding: [0x00,0x01,0xcb,0xd1,0x00,0x03,0x12,0x00] 4164b1702e8SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x1d,0x80,0xbe] 4174b1702e8SMatt Arsenault; 4184b1702e8SMatt Arsenault; GFX10-LABEL: v_fma_k_f32_src_mods: 4194b1702e8SMatt Arsenault; GFX10: ; %bb.0: 4204b1702e8SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf] 4214b1702e8SMatt Arsenault; GFX10-NEXT: v_fma_f32 v0, |v0|, v1, 0x43800000 ; encoding: [0x00,0x01,0x4b,0xd5,0x00,0x03,0xfe,0x03,0x00,0x00,0x80,0x43] 4224b1702e8SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x20,0x80,0xbe] 4234b1702e8SMatt Arsenault; 4244b1702e8SMatt Arsenault; GFX11-LABEL: v_fma_k_f32_src_mods: 4254b1702e8SMatt Arsenault; GFX11: ; %bb.0: 4264b1702e8SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x89,0xbf] 4274b1702e8SMatt Arsenault; GFX11-NEXT: v_fma_f32 v0, |v0|, v1, 0x43800000 ; encoding: [0x00,0x01,0x13,0xd6,0x00,0x03,0xfe,0x03,0x00,0x00,0x80,0x43] 4284b1702e8SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 429*4e707201SJay Foad; 430*4e707201SJay Foad; GFX1200-LABEL: v_fma_k_f32_src_mods: 431*4e707201SJay Foad; GFX1200: ; %bb.0: 432*4e707201SJay Foad; GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf] 433*4e707201SJay Foad; GFX1200-NEXT: s_wait_expcnt 0x0 ; encoding: [0x00,0x00,0xc4,0xbf] 434*4e707201SJay Foad; GFX1200-NEXT: s_wait_samplecnt 0x0 ; encoding: [0x00,0x00,0xc2,0xbf] 435*4e707201SJay Foad; GFX1200-NEXT: s_wait_bvhcnt 0x0 ; encoding: [0x00,0x00,0xc3,0xbf] 436*4e707201SJay Foad; GFX1200-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf] 437*4e707201SJay Foad; GFX1200-NEXT: v_fma_f32 v0, |v0|, v1, 0x43800000 ; encoding: [0x00,0x01,0x13,0xd6,0x00,0x03,0xfe,0x03,0x00,0x00,0x80,0x43] 438*4e707201SJay Foad; GFX1200-NEXT: s_setpc_b64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe] 4394b1702e8SMatt Arsenault %fabs.x = call float @llvm.fabs.f32(float %x) 4404b1702e8SMatt Arsenault %fma = call float @llvm.fma.f32(float %fabs.x, float %y, float 256.0) 4414b1702e8SMatt Arsenault ret float %fma 4424b1702e8SMatt Arsenault} 4434b1702e8SMatt Arsenault 4444b1702e8SMatt Arsenault; GFX9: codeLenInByte = 24 4454b1702e8SMatt Arsenault; GFX10: codeLenInByte = 20 4464b1702e8SMatt Arsenault; GFX11: codeLenInByte = 20 447*4e707201SJay Foad; GFX1200: codeLenInByte = 36 448ecfdc23dSMirko Brkušanin 449ecfdc23dSMirko Brkušanindefine amdgpu_ps float @s_fmaak_f32(float inreg %x, float inreg %y) { 450ecfdc23dSMirko Brkušanin; GFX9-LABEL: s_fmaak_f32: 451ecfdc23dSMirko Brkušanin; GFX9: ; %bb.0: 452ecfdc23dSMirko Brkušanin; GFX9-NEXT: v_mov_b32_e32 v0, s1 ; encoding: [0x01,0x02,0x00,0x7e] 453ecfdc23dSMirko Brkušanin; GFX9-NEXT: v_mov_b32_e32 v1, 0x43800000 ; encoding: [0xff,0x02,0x02,0x7e,0x00,0x00,0x80,0x43] 454ecfdc23dSMirko Brkušanin; GFX9-NEXT: v_fma_f32 v0, s0, v0, v1 ; encoding: [0x00,0x00,0xcb,0xd1,0x00,0x00,0x06,0x04] 455ecfdc23dSMirko Brkušanin; GFX9-NEXT: ; return to shader part epilog 456ecfdc23dSMirko Brkušanin; 457ecfdc23dSMirko Brkušanin; GFX10-LABEL: s_fmaak_f32: 458ecfdc23dSMirko Brkušanin; GFX10: ; %bb.0: 4590d408317SJay Foad; GFX10-NEXT: v_mov_b32_e32 v0, s1 ; encoding: [0x01,0x02,0x00,0x7e] 4600d408317SJay Foad; GFX10-NEXT: v_fmaak_f32 v0, s0, v0, 0x43800000 ; encoding: [0x00,0x00,0x00,0x5a,0x00,0x00,0x80,0x43] 461ecfdc23dSMirko Brkušanin; GFX10-NEXT: ; return to shader part epilog 462ecfdc23dSMirko Brkušanin; 463ecfdc23dSMirko Brkušanin; GFX1100-LABEL: s_fmaak_f32: 464ecfdc23dSMirko Brkušanin; GFX1100: ; %bb.0: 4650d408317SJay Foad; GFX1100-NEXT: v_mov_b32_e32 v0, s1 ; encoding: [0x01,0x02,0x00,0x7e] 466ecfdc23dSMirko Brkušanin; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) ; encoding: [0x01,0x00,0x87,0xbf] 4670d408317SJay Foad; GFX1100-NEXT: v_fmaak_f32 v0, s0, v0, 0x43800000 ; encoding: [0x00,0x00,0x00,0x5a,0x00,0x00,0x80,0x43] 468ecfdc23dSMirko Brkušanin; GFX1100-NEXT: ; return to shader part epilog 469ecfdc23dSMirko Brkušanin; 470ecfdc23dSMirko Brkušanin; GFX1150-LABEL: s_fmaak_f32: 471ecfdc23dSMirko Brkušanin; GFX1150: ; %bb.0: 472ecfdc23dSMirko Brkušanin; GFX1150-NEXT: s_fmaak_f32 s0, s0, s1, 0x43800000 ; encoding: [0x00,0x01,0x80,0xa2,0x00,0x00,0x80,0x43] 473ecfdc23dSMirko Brkušanin; GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_3) ; encoding: [0x0b,0x00,0x87,0xbf] 474ecfdc23dSMirko Brkušanin; GFX1150-NEXT: v_mov_b32_e32 v0, s0 ; encoding: [0x00,0x02,0x00,0x7e] 475ecfdc23dSMirko Brkušanin; GFX1150-NEXT: ; return to shader part epilog 476*4e707201SJay Foad; 477*4e707201SJay Foad; GFX1200-LABEL: s_fmaak_f32: 478*4e707201SJay Foad; GFX1200: ; %bb.0: 479*4e707201SJay Foad; GFX1200-NEXT: s_fmaak_f32 s0, s0, s1, 0x43800000 ; encoding: [0x00,0x01,0x80,0xa2,0x00,0x00,0x80,0x43] 480*4e707201SJay Foad; GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_3) ; encoding: [0x0b,0x00,0x87,0xbf] 481*4e707201SJay Foad; GFX1200-NEXT: v_mov_b32_e32 v0, s0 ; encoding: [0x00,0x02,0x00,0x7e] 482*4e707201SJay Foad; GFX1200-NEXT: ; return to shader part epilog 483ecfdc23dSMirko Brkušanin %fma = call float @llvm.fma.f32(float %x, float %y, float 256.0) 484ecfdc23dSMirko Brkušanin ret float %fma 485ecfdc23dSMirko Brkušanin} 486ecfdc23dSMirko Brkušanin 487ecfdc23dSMirko Brkušanin; GFX9: codeLenInByte = 20 4880d408317SJay Foad; GFX10: codeLenInByte = 12 4890d408317SJay Foad; GFX1100: codeLenInByte = 16 490ecfdc23dSMirko Brkušanin; GFX1150: codeLenInByte = 16 491*4e707201SJay Foad; GFX1200: codeLenInByte = 16 492