Mostsly these would fail due to trying to use SI with a flat operation. Implementing global loads with MUBUF is more work than flat, so these won't be handled in the initial load selection. Others fail because store of s64 won't initially work, as the current set of patterns expect everything to be turned into v2i32. llvm-svn: 365493
71 lines
3.3 KiB
YAML
71 lines
3.3 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX6 %s
|
|
# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX6 %s
|
|
# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s
|
|
# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s
|
|
|
|
---
|
|
name: sub_s32
|
|
legalized: true
|
|
regBankSelected: true
|
|
tracksRegLiveness: true
|
|
|
|
body: |
|
|
bb.0:
|
|
liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr3_vgpr4
|
|
|
|
|
|
; GFX6-LABEL: name: sub_s32
|
|
; GFX6: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr3_vgpr4
|
|
; GFX6: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
|
; GFX6: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
|
; GFX6: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GFX6: [[S_SUB_U32_:%[0-9]+]]:sreg_32_xm0 = S_SUB_U32 [[COPY]], [[COPY1]], implicit-def $scc
|
|
; GFX6: %7:vgpr_32, dead %12:sreg_64_xexec = V_SUB_I32_e64 [[COPY2]], [[S_SUB_U32_]], 0, implicit $exec
|
|
; GFX6: %8:vgpr_32, dead %11:sreg_64_xexec = V_SUB_I32_e64 [[S_SUB_U32_]], %7, 0, implicit $exec
|
|
; GFX6: %9:vgpr_32, dead %10:sreg_64_xexec = V_SUB_I32_e64 %8, [[COPY2]], 0, implicit $exec
|
|
; GFX6: S_ENDPGM 0, implicit %9
|
|
; GFX9-LABEL: name: sub_s32
|
|
; GFX9: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr3_vgpr4
|
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
|
; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GFX9: [[S_SUB_U32_:%[0-9]+]]:sreg_32_xm0 = S_SUB_U32 [[COPY]], [[COPY1]], implicit-def $scc
|
|
; GFX9: [[V_SUB_U32_e64_:%[0-9]+]]:vgpr_32 = V_SUB_U32_e64 [[COPY2]], [[S_SUB_U32_]], 0, implicit $exec
|
|
; GFX9: [[V_SUB_U32_e64_1:%[0-9]+]]:vgpr_32 = V_SUB_U32_e64 [[S_SUB_U32_]], [[V_SUB_U32_e64_]], 0, implicit $exec
|
|
; GFX9: [[V_SUB_U32_e64_2:%[0-9]+]]:vgpr_32 = V_SUB_U32_e64 [[V_SUB_U32_e64_1]], [[COPY2]], 0, implicit $exec
|
|
; GFX9: S_ENDPGM 0, implicit [[V_SUB_U32_e64_2]]
|
|
; GFX10-LABEL: name: sub_s32
|
|
; GFX10: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr3_vgpr4
|
|
; GFX10: $vcc_hi = IMPLICIT_DEF
|
|
; GFX10: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
|
; GFX10: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
|
; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0
|
|
; GFX10: [[S_SUB_U32_:%[0-9]+]]:sreg_32_xm0 = S_SUB_U32 [[COPY]], [[COPY1]], implicit-def $scc
|
|
; GFX10: [[V_SUB_U32_e64_:%[0-9]+]]:vgpr_32 = V_SUB_U32_e64 [[COPY2]], [[S_SUB_U32_]], 0, implicit $exec
|
|
; GFX10: [[V_SUB_U32_e64_1:%[0-9]+]]:vgpr_32 = V_SUB_U32_e64 [[S_SUB_U32_]], [[V_SUB_U32_e64_]], 0, implicit $exec
|
|
; GFX10: [[V_SUB_U32_e64_2:%[0-9]+]]:vgpr_32 = V_SUB_U32_e64 [[V_SUB_U32_e64_1]], [[COPY2]], 0, implicit $exec
|
|
; GFX10: S_ENDPGM 0, implicit [[V_SUB_U32_e64_2]]
|
|
%0:sgpr(s32) = COPY $sgpr0
|
|
%1:sgpr(s32) = COPY $sgpr1
|
|
%2:vgpr(s32) = COPY $vgpr0
|
|
%3:vgpr(p1) = COPY $vgpr3_vgpr4
|
|
%4:sgpr(s32) = G_CONSTANT i32 1
|
|
%5:sgpr(s32) = G_CONSTANT i32 4096
|
|
|
|
; sub ss
|
|
%6:sgpr(s32) = G_SUB %0, %1
|
|
|
|
; sub vs
|
|
%7:vgpr(s32) = G_SUB %2, %6
|
|
|
|
; sub sv
|
|
%8:vgpr(s32) = G_SUB %6, %7
|
|
|
|
; sub vv
|
|
%9:vgpr(s32) = G_SUB %8, %2
|
|
|
|
S_ENDPGM 0, implicit %9
|
|
|
|
...
|