While they are represent 32/16 bit immediate values they are already included in encoding of the instructions that use them and are not true literals. FMAMK and FMAAK instructions that use them are marked with fixed size so getInstSizeInBytes will not increase the size for these operands. We also add tests whose logic relies on KIMM16 and KIMM32 being considered not inlinable. Differential Revision: https://reviews.llvm.org/D157624
86 lines
3.1 KiB
YAML
86 lines
3.1 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -run-pass=si-fold-operands -verify-machineinstrs -o - %s | FileCheck --check-prefix=GCN %s
|
|
|
|
# Do not fold noninlinable constants in instructions like fmaak and fmamk next
|
|
# to kimm16 and kimm32 operands
|
|
|
|
---
|
|
name: fmaak_f16
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0
|
|
|
|
; GCN-LABEL: name: fmaak_f16
|
|
; GCN: liveins: $vgpr0
|
|
; GCN-NEXT: {{ $}}
|
|
; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 14950, implicit $exec
|
|
; GCN-NEXT: [[V_FMAAK_F16_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAAK_F16 [[COPY]], [[V_MOV_B32_e32_]], 11878, implicit $mode, implicit $exec
|
|
; GCN-NEXT: $vgpr0 = COPY [[V_FMAAK_F16_]]
|
|
%0:vgpr_32 = COPY $vgpr0
|
|
%1:vgpr_32 = V_MOV_B32_e32 14950, implicit $exec
|
|
%2:vgpr_32 = contract nofpexcept V_FMAAK_F16 %0, %1, 11878, implicit $mode, implicit $exec
|
|
$vgpr0 = COPY %2
|
|
...
|
|
|
|
---
|
|
name: fmamk_f16
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0
|
|
|
|
; GCN-LABEL: name: fmamk_f16
|
|
; GCN: liveins: $vgpr0
|
|
; GCN-NEXT: {{ $}}
|
|
; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 14950, implicit $exec
|
|
; GCN-NEXT: [[V_FMAMK_F16_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAMK_F16 [[COPY]], 11878, [[V_MOV_B32_e32_]], implicit $mode, implicit $exec
|
|
; GCN-NEXT: $vgpr0 = COPY [[V_FMAMK_F16_]]
|
|
%0:vgpr_32 = COPY $vgpr0
|
|
%1:vgpr_32 = V_MOV_B32_e32 14950, implicit $exec
|
|
%2:vgpr_32 = contract nofpexcept V_FMAMK_F16 %0, 11878, %1, implicit $mode, implicit $exec
|
|
$vgpr0 = COPY %2
|
|
...
|
|
|
|
---
|
|
name: fmaak_f32
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0
|
|
|
|
; GCN-LABEL: name: fmaak_f32
|
|
; GCN: liveins: $vgpr0
|
|
; GCN-NEXT: {{ $}}
|
|
; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 979789416, implicit $exec
|
|
; GCN-NEXT: [[V_FMAAK_F32_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAAK_F32 [[COPY]], [[V_MOV_B32_e32_]], 778462824, implicit $mode, implicit $exec
|
|
; GCN-NEXT: $vgpr0 = COPY [[V_FMAAK_F32_]]
|
|
%0:vgpr_32 = COPY $vgpr0
|
|
%1:vgpr_32 = V_MOV_B32_e32 979789416, implicit $exec
|
|
%2:vgpr_32 = contract nofpexcept V_FMAAK_F32 %0, %1, 778462824, implicit $mode, implicit $exec
|
|
$vgpr0 = COPY %2
|
|
...
|
|
|
|
---
|
|
name: fmamk_f32
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0
|
|
|
|
; GCN-LABEL: name: fmamk_f32
|
|
; GCN: liveins: $vgpr0
|
|
; GCN-NEXT: {{ $}}
|
|
; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 979789416, implicit $exec
|
|
; GCN-NEXT: [[V_FMAMK_F32_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAMK_F32 [[COPY]], 778462824, [[V_MOV_B32_e32_]], implicit $mode, implicit $exec
|
|
; GCN-NEXT: $vgpr0 = COPY [[V_FMAMK_F32_]]
|
|
%0:vgpr_32 = COPY $vgpr0
|
|
%1:vgpr_32 = V_MOV_B32_e32 979789416, implicit $exec
|
|
%2:vgpr_32 = contract nofpexcept V_FMAMK_F32 %0, 778462824, %1, implicit $mode, implicit $exec
|
|
$vgpr0 = COPY %2
|
|
...
|