[llvm] 2e12092 - AMDGPU: Add baseline test for instructions zeroing high bits
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 22 10:27:45 PDT 2021
Author: Matt Arsenault
Date: 2021-06-22T13:27:39-04:00
New Revision: 2e120920acd2241658f87a995c3a685603e992f3
URL: https://github.com/llvm/llvm-project/commit/2e120920acd2241658f87a995c3a685603e992f3
DIFF: https://github.com/llvm/llvm-project/commit/2e120920acd2241658f87a995c3a685603e992f3.diff
LOG: AMDGPU: Add baseline test for instructions zeroing high bits
Added:
llvm/test/CodeGen/AMDGPU/high-bits-zeroed-16-bit-ops.mir
Modified:
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/AMDGPU/high-bits-zeroed-16-bit-ops.mir b/llvm/test/CodeGen/AMDGPU/high-bits-zeroed-16-bit-ops.mir
new file mode 100644
index 000000000000..769450629653
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/high-bits-zeroed-16-bit-ops.mir
@@ -0,0 +1,2111 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -run-pass=si-fold-operands -o - %s | FileCheck -check-prefix=GFX8 %s
+# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx906 -run-pass=si-fold-operands -o - %s | FileCheck -check-prefix=GFX9 %s
+# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 -run-pass=si-fold-operands -o - %s | FileCheck -check-prefix=GFX10 %s
+
+# Test we recognize all forms of and with mask as clearing the high bits.
+---
+name: v_cvt_f16_f32_altmask
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_cvt_f16_f32_altmask
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %and0:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: %smask:sreg_32 = S_MOV_B32 65535
+ ; GFX8: %and1:vgpr_32 = V_AND_B32_e64 %smask, %op, implicit $exec
+ ; GFX8: %vmask:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec
+ ; GFX8: %and2:vgpr_32 = V_AND_B32_e64 %vmask, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and0
+ ; GFX8: $vgpr1 = COPY %and1
+ ; GFX8: $vgpr2 = COPY %and2
+ ; GFX9-LABEL: name: v_cvt_f16_f32_altmask
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %and0:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: %smask:sreg_32 = S_MOV_B32 65535
+ ; GFX9: %and1:vgpr_32 = V_AND_B32_e64 %smask, %op, implicit $exec
+ ; GFX9: %vmask:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec
+ ; GFX9: %and2:vgpr_32 = V_AND_B32_e64 %vmask, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and0
+ ; GFX9: $vgpr1 = COPY %and1
+ ; GFX9: $vgpr2 = COPY %and2
+ ; GFX10-LABEL: name: v_cvt_f16_f32_altmask
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %and0:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: %and1:vgpr_32 = V_AND_B32_e64 65535, %op, implicit $exec
+ ; GFX10: %and2:vgpr_32 = V_AND_B32_e64 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and0
+ ; GFX10: $vgpr1 = COPY %and1
+ ; GFX10: $vgpr2 = COPY %and2
+ %0:vgpr_32 = COPY $vgpr0
+ %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed %0, 0, 0, implicit $mode, implicit $exec
+ %and0:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ %smask:sreg_32 = S_MOV_B32 65535
+ %and1:vgpr_32 = V_AND_B32_e64 %smask, %op, implicit $exec
+ %vmask:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec
+ %and2:vgpr_32 = V_AND_B32_e64 %vmask, %op, implicit $exec
+ $vgpr0 = COPY %and0
+ $vgpr1 = COPY %and1
+ $vgpr2 = COPY %and2
+
+...
+
+# Test we do not assume the high bits are zero
+---
+name: wrong_mask_value
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: wrong_mask_value
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %mask:sreg_32 = S_MOV_B32 65534
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e64 %mask, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: wrong_mask_value
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %mask:sreg_32 = S_MOV_B32 65534
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e64 %mask, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: wrong_mask_value
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e64 65534, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed %0, 0, 0, implicit $mode, implicit $exec
+ %mask:sreg_32 = S_MOV_B32 65534
+ %and:vgpr_32 = V_AND_B32_e64 %mask, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
+
+---
+name: v_cvt_f16_f32
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_cvt_f16_f32
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_F32_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_cvt_f16_f32
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_F32_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_cvt_f16_f32
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_F32_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_F32_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_cvt_f16_u16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_cvt_f16_u16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_U16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_U16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_cvt_f16_u16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_U16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_U16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_cvt_f16_u16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_U16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_U16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_U16_e64 %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_U16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_cvt_f16_i16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_cvt_f16_i16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_I16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_I16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_cvt_f16_i16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_I16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_I16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_cvt_f16_i16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_I16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_I16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_I16_e64 %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_I16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_rcp_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_rcp_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_RCP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_RCP_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_rcp_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_RCP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_RCP_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_rcp_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_RCP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_RCP_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_RCP_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_RCP_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+---
+name: v_rsq_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_rsq_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_RSQ_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_RSQ_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_rsq_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_RSQ_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_RSQ_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_rsq_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_RSQ_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_RSQ_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_RSQ_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_RSQ_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+---
+name: v_sqrt_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_sqrt_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_SQRT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_SQRT_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_sqrt_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_SQRT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_SQRT_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_sqrt_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_SQRT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_SQRT_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_SQRT_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_SQRT_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_log_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_log_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_LOG_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_LOG_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_log_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_LOG_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_LOG_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_log_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_LOG_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_LOG_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_LOG_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_LOG_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_exp_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_exp_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_EXP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_EXP_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_exp_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_EXP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_EXP_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_exp_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_EXP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_EXP_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_EXP_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_EXP_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_sin_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_sin_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_SIN_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_SIN_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_sin_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_SIN_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_SIN_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_sin_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_SIN_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_SIN_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_SIN_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_SIN_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_cos_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_cos_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_COS_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_COS_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_cos_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_COS_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_COS_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_cos_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_COS_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_COS_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_COS_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_COS_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_floor_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_floor_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_FLOOR_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_FLOOR_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_floor_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_FLOOR_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_FLOOR_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_floor_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_FLOOR_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_FLOOR_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_FLOOR_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_FLOOR_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_ceil_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_ceil_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_CEIL_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_CEIL_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_ceil_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_CEIL_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_CEIL_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_ceil_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_CEIL_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_CEIL_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_CEIL_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_CEIL_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_trunc_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_trunc_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_TRUNC_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_TRUNC_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_trunc_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_TRUNC_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_TRUNC_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_trunc_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_TRUNC_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_TRUNC_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_TRUNC_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_TRUNC_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_rndne_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_rndne_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_RNDNE_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_RNDNE_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_rndne_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_RNDNE_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_RNDNE_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_rndne_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_RNDNE_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_RNDNE_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_RNDNE_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_RNDNE_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_fract_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_fract_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_FRACT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_FRACT_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_fract_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_FRACT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_FRACT_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_fract_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_FRACT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_FRACT_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_FRACT_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_FRACT_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_frexp_mant_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_frexp_mant_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_frexp_mant_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_frexp_mant_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_frexp_exp_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0
+ ; GFX8-LABEL: name: v_frexp_exp_f16
+ ; GFX8: liveins: $vgpr0
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop1
+ ; GFX9-LABEL: name: v_frexp_exp_f16
+ ; GFX9: liveins: $vgpr0
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop1
+ ; GFX10-LABEL: name: v_frexp_exp_f16
+ ; GFX10: liveins: $vgpr0
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e32 [[COPY]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop1
+ %0:vgpr_32 = COPY $vgpr0
+ %op_vop3:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e32 %0, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop1
+
+...
+
+---
+name: v_ldexp_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_ldexp_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_LDEXP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_LDEXP_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_ldexp_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_LDEXP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_LDEXP_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_ldexp_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_LDEXP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_LDEXP_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_LDEXP_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_LDEXP_F16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_lshlrev_b16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_lshlrev_b16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_LSHLREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_LSHLREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_lshlrev_b16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_LSHLREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_LSHLREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_lshlrev_b16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_LSHLREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_LSHLREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_LSHLREV_B16_e64 %0, %1, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_LSHLREV_B16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_lshrrev_b16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_lshrrev_b16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_LSHRREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_LSHRREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_lshrrev_b16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_LSHRREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_LSHRREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_lshrrev_b16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_LSHRREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_LSHRREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_LSHRREV_B16_e64 %0, %1, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_LSHRREV_B16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_ashrrev_i16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_ashrrev_i16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_ASHRREV_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_ASHRREV_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_ashrrev_i16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_ASHRREV_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_ASHRREV_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_ashrrev_i16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_ASHRREV_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_ASHRREV_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_ASHRREV_I16_e64 %0, %1, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_ASHRREV_I16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_add_u16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_add_u16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_ADD_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_ADD_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_add_u16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_ADD_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_ADD_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_add_u16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_ADD_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_ADD_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_ADD_U16_e64 %0, %1, 0, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_ADD_U16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_sub_u16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_sub_u16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_SUB_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_SUB_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_sub_u16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_SUB_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_SUB_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_sub_u16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_SUB_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_SUB_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_SUB_U16_e64 %0, %1, 0, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_SUB_U16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_subrev_u16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_subrev_u16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_SUBREV_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_SUBREV_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_subrev_u16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_SUBREV_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_SUBREV_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_subrev_u16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_SUBREV_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_SUBREV_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_SUBREV_U16_e64 %0, %1, 0, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_SUBREV_U16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_mul_lo_u16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_mul_lo_u16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_MUL_LO_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_MUL_LO_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_mul_lo_u16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_MUL_LO_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_MUL_LO_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_mul_lo_u16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_MUL_LO_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_MUL_LO_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_MUL_LO_U16_e64 %0, %1, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_MUL_LO_U16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_add_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_add_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_add_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_add_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_sub_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_sub_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_sub_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_sub_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_subrev_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_subrev_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_subrev_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_subrev_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_mul_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_mul_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_mul_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_mul_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_max_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_max_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_max_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_max_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_min_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_min_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_min_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_min_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec
+ %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_max_u16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_max_u16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_MAX_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_max_u16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_MAX_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_max_u16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_MAX_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_MAX_U16_e64 %0, %1, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_MAX_U16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+---
+name: v_min_u16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_min_u16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_MIN_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_min_u16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_MIN_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_min_u16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_MIN_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_MIN_U16_e64 %0, %1, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_MIN_U16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_max_i16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_max_i16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_MAX_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_max_i16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_MAX_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_max_i16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_MAX_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_MAX_I16_e64 %0, %1, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_MAX_I16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+---
+name: v_min_i16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_min_i16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_MIN_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX8: $vgpr1 = COPY %and_vop2
+ ; GFX9-LABEL: name: v_min_i16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_MIN_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX9: $vgpr1 = COPY %and_vop2
+ ; GFX10-LABEL: name: v_min_i16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_MIN_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ ; GFX10: $vgpr1 = COPY %and_vop2
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op_vop3:vgpr_32 = nofpexcept V_MIN_I16_e64 %0, %1, implicit $mode, implicit $exec
+ %op_vop2:vgpr_32 = nofpexcept V_MIN_I16_e32 %0, %1, implicit $mode, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ $vgpr0 = COPY %and_vop3
+ $vgpr1 = COPY %and_vop2
+
+...
+
+---
+name: v_mad_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8-LABEL: name: v_mad_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX8: %op:vgpr_32 = nofpexcept V_MAD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: v_mad_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX9: %op:vgpr_32 = nofpexcept V_MAD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: v_mad_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX10: %op:vgpr_32 = nofpexcept V_MAD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %2:vgpr_32 = COPY $vgpr2
+ %op:vgpr_32 = nofpexcept V_MAD_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
+ %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
+
+---
+name: v_fma_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8-LABEL: name: v_fma_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX8: %op:vgpr_32 = nofpexcept V_FMA_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: v_fma_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX9: %op:vgpr_32 = nofpexcept V_FMA_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: v_fma_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX10: %op:vgpr_32 = nofpexcept V_FMA_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %2:vgpr_32 = COPY $vgpr2
+ %op:vgpr_32 = nofpexcept V_FMA_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
+ %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
+
+---
+name: v_div_fixup_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8-LABEL: name: v_div_fixup_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX8: %op:vgpr_32 = nofpexcept V_DIV_FIXUP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: v_div_fixup_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX9: %op:vgpr_32 = nofpexcept V_DIV_FIXUP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: v_div_fixup_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX10: %op:vgpr_32 = nofpexcept V_DIV_FIXUP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %2:vgpr_32 = COPY $vgpr2
+ %op:vgpr_32 = nofpexcept V_DIV_FIXUP_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
+ %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
+
+---
+name: v_madak_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_madak_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op:vgpr_32 = nofpexcept V_MADAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: v_madak_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op:vgpr_32 = nofpexcept V_MADAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: v_madak_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op:vgpr_32 = nofpexcept V_MADAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op:vgpr_32 = nofpexcept V_MADAK_F16 %0, %1, 1234, implicit $mode, implicit $exec
+ %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
+
+---
+name: v_madmk_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_madmk_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op:vgpr_32 = nofpexcept V_MADMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: v_madmk_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op:vgpr_32 = nofpexcept V_MADMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: v_madmk_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op:vgpr_32 = nofpexcept V_MADMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op:vgpr_32 = nofpexcept V_MADMK_F16 %0, 1234, %1, implicit $mode, implicit $exec
+ %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
+
+---
+name: v_fmaak_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_fmaak_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op:vgpr_32 = nofpexcept V_FMAAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: v_fmaak_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op:vgpr_32 = nofpexcept V_FMAAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: v_fmaak_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op:vgpr_32 = nofpexcept V_FMAAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op:vgpr_32 = nofpexcept V_FMAAK_F16 %0, %1, 1234, implicit $mode, implicit $exec
+ %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
+
+---
+name: v_fmamk_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1
+ ; GFX8-LABEL: name: v_fmamk_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: %op:vgpr_32 = nofpexcept V_FMAMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: v_fmamk_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: %op:vgpr_32 = nofpexcept V_FMAMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: v_fmamk_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: %op:vgpr_32 = nofpexcept V_FMAMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %op:vgpr_32 = nofpexcept V_FMAMK_F16 %0, 1234, %1, implicit $mode, implicit $exec
+ %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
+
+---
+name: v_mac_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8-LABEL: name: v_mac_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_MAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_MAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop2
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX9-LABEL: name: v_mac_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_MAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_MAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop2
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX10-LABEL: name: v_mac_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_MAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_MAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop2
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %2:vgpr_32 = COPY $vgpr2
+ %op_vop2:vgpr_32 = nofpexcept V_MAC_F16_e32 %0, %1, %2, implicit $mode, implicit $exec
+ %op_vop3:vgpr_32 = nofpexcept V_MAC_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ $vgpr0 = COPY %and_vop2
+ $vgpr0 = COPY %and_vop3
+
+...
+
+---
+name: v_fmac_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8-LABEL: name: v_fmac_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX8: %op_vop2:vgpr_32 = nofpexcept V_FMAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec
+ ; GFX8: %op_vop3:vgpr_32 = nofpexcept V_FMAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX8: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and_vop2
+ ; GFX8: $vgpr0 = COPY %and_vop3
+ ; GFX9-LABEL: name: v_fmac_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX9: %op_vop2:vgpr_32 = nofpexcept V_FMAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec
+ ; GFX9: %op_vop3:vgpr_32 = nofpexcept V_FMAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX9: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and_vop2
+ ; GFX9: $vgpr0 = COPY %and_vop3
+ ; GFX10-LABEL: name: v_fmac_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX10: %op_vop2:vgpr_32 = nofpexcept V_FMAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec
+ ; GFX10: %op_vop3:vgpr_32 = nofpexcept V_FMAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ ; GFX10: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and_vop2
+ ; GFX10: $vgpr0 = COPY %and_vop3
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %2:vgpr_32 = COPY $vgpr2
+ %op_vop2:vgpr_32 = nofpexcept V_FMAC_F16_e32 %0, %1, %2, implicit $mode, implicit $exec
+ %op_vop3:vgpr_32 = nofpexcept V_FMAC_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
+ %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec
+ %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec
+ $vgpr0 = COPY %and_vop2
+ $vgpr0 = COPY %and_vop3
+
+...
+
+---
+name: no_fold_v_mad_mixlo_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; GFX8-LABEL: name: no_fold_v_mad_mixlo_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX8: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX8: %op:vgpr_32 = nofpexcept V_MAD_MIXLO_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: no_fold_v_mad_mixlo_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX9: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX9: %op:vgpr_32 = nofpexcept V_MAD_MIXLO_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: no_fold_v_mad_mixlo_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX10: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX10: %op:vgpr_32 = nofpexcept V_MAD_MIXLO_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %2:vgpr_32 = COPY $vgpr2
+ %3:vgpr_32 = COPY $vgpr3
+ %op:vgpr_32 = nofpexcept V_MAD_MIXLO_F16 0, %0, 0, %1, 0, %2, 0, %3, 0, 0, implicit $mode, implicit $exec
+ %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
+
+---
+name: no_fold_v_mad_mixhi_f16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; GFX8-LABEL: name: no_fold_v_mad_mixhi_f16
+ ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX8: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX8: %op:vgpr_32 = nofpexcept V_MAD_MIXHI_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec
+ ; GFX8: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX8: $vgpr0 = COPY %and
+ ; GFX9-LABEL: name: no_fold_v_mad_mixhi_f16
+ ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX9: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX9: %op:vgpr_32 = nofpexcept V_MAD_MIXHI_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec
+ ; GFX9: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX9: $vgpr0 = COPY %and
+ ; GFX10-LABEL: name: no_fold_v_mad_mixhi_f16
+ ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX10: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX10: %op:vgpr_32 = nofpexcept V_MAD_MIXHI_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec
+ ; GFX10: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ ; GFX10: $vgpr0 = COPY %and
+ %0:vgpr_32 = COPY $vgpr0
+ %1:vgpr_32 = COPY $vgpr1
+ %2:vgpr_32 = COPY $vgpr2
+ %3:vgpr_32 = COPY $vgpr3
+ %op:vgpr_32 = nofpexcept V_MAD_MIXHI_F16 0, %0, 0, %1, 0, %2, 0, %3, 0, 0, implicit $mode, implicit $exec
+ %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec
+ $vgpr0 = COPY %and
+
+...
More information about the llvm-commits
mailing list