forked from OSchip/llvm-project
AMDGPU/GlobalISel: Fix RegBankSelect for sendmsg intrinsics
This wasn't updated for the immarg handling change. llvm-svn: 373837
This commit is contained in:
parent
2decdf42b9
commit
69c65a8609
|
@ -307,16 +307,16 @@ AMDGPURegisterBankInfo::getInstrAlternativeMappingsIntrinsicWSideEffects(
|
|||
case Intrinsic::amdgcn_s_sendmsg:
|
||||
case Intrinsic::amdgcn_s_sendmsghalt: {
|
||||
// FIXME: Should have no register for immediate
|
||||
static const OpRegBankEntry<2> Table[2] = {
|
||||
static const OpRegBankEntry<1> Table[2] = {
|
||||
// Perfectly legal.
|
||||
{ { AMDGPU::SGPRRegBankID, AMDGPU::SGPRRegBankID }, 1 },
|
||||
{ { AMDGPU::SGPRRegBankID }, 1 },
|
||||
|
||||
// Need readlane
|
||||
{ { AMDGPU::SGPRRegBankID, AMDGPU::VGPRRegBankID }, 3 }
|
||||
{ { AMDGPU::VGPRRegBankID }, 3 }
|
||||
};
|
||||
|
||||
const std::array<unsigned, 2> RegSrcOpIdx = { { 1, 2 } };
|
||||
return addMappingFromTable<2>(MI, MRI, RegSrcOpIdx, makeArrayRef(Table));
|
||||
const std::array<unsigned, 1> RegSrcOpIdx = { { 2 } };
|
||||
return addMappingFromTable<1>(MI, MRI, RegSrcOpIdx, makeArrayRef(Table));
|
||||
}
|
||||
default:
|
||||
return RegisterBankInfo::getInstrAlternativeMappings(MI);
|
||||
|
@ -2780,7 +2780,6 @@ AMDGPURegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
|
|||
// This must be an SGPR, but accept a VGPR.
|
||||
unsigned Bank = getRegBankID(MI.getOperand(2).getReg(), MRI, *TRI,
|
||||
AMDGPU::SGPRRegBankID);
|
||||
OpdsMapping[1] = AMDGPU::getValueMapping(Bank, 32);
|
||||
OpdsMapping[2] = AMDGPU::getValueMapping(Bank, 32);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -11,11 +11,9 @@ body: |
|
|||
liveins: $sgpr0
|
||||
; CHECK-LABEL: name: sendmsg_s
|
||||
; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), [[C]](s32), [[COPY]](s32)
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), 0, [[COPY]](s32)
|
||||
%0:_(s32) = COPY $sgpr0
|
||||
%1:_(s32) = G_CONSTANT i32 0 ; FIXME: Should not be a constant
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), %1, %0
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), 0, %0
|
||||
...
|
||||
|
||||
---
|
||||
|
@ -27,11 +25,8 @@ body: |
|
|||
liveins: $vgpr0
|
||||
; CHECK-LABEL: name: sendmsg_v
|
||||
; CHECK: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
|
||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||
; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
|
||||
; CHECK: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[COPY]](s32), implicit $exec
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), [[C]](s32), [[V_READFIRSTLANE_B32_]]
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), 0, [[V_READFIRSTLANE_B32_]]
|
||||
%0:_(s32) = COPY $vgpr0
|
||||
%1:_(s32) = G_CONSTANT i32 0 ; FIXME: Should not be a constant
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), %1, %0
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), 0, %0
|
||||
...
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||
# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect -regbankselect-fast -verify-machineinstrs -o - %s | FileCheck %s
|
||||
# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect -regbankselect-greedy -verify-machineinstrs -o - %s | FileCheck %s
|
||||
# XUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect -regbankselect-greedy -verify-machineinstrs -o - %s | FileCheck %s
|
||||
|
||||
---
|
||||
name: sendmsghalt_s
|
||||
|
@ -11,11 +11,9 @@ body: |
|
|||
liveins: $sgpr0
|
||||
; CHECK-LABEL: name: sendmsghalt_s
|
||||
; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsghalt), [[C]](s32), [[COPY]](s32)
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsghalt), 0, [[COPY]](s32)
|
||||
%0:_(s32) = COPY $sgpr0
|
||||
%1:_(s32) = G_CONSTANT i32 0 ; FIXME: Should not be a constant
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsghalt), %1, %0
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsghalt), 0, %0
|
||||
...
|
||||
|
||||
---
|
||||
|
@ -27,11 +25,8 @@ body: |
|
|||
liveins: $vgpr0
|
||||
; CHECK-LABEL: name: sendmsghalt_v
|
||||
; CHECK: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
|
||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||
; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
|
||||
; CHECK: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[COPY]](s32), implicit $exec
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsghalt), [[C]](s32), [[V_READFIRSTLANE_B32_]]
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsghalt), 0, [[V_READFIRSTLANE_B32_]]
|
||||
%0:_(s32) = COPY $vgpr0
|
||||
%1:_(s32) = G_CONSTANT i32 0 ; FIXME: Should not be a constant
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsghalt), %1, %0
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsghalt), 0, %0
|
||||
...
|
||||
|
|
|
@ -26,12 +26,8 @@ body: |
|
|||
bb.0:
|
||||
; CHECK-LABEL: name: test_constant_s32_sgpr_use
|
||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1
|
||||
; CHECK: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), [[C1]](s32), [[C]](s32)
|
||||
; CHECK: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), 0, [[C]](s32)
|
||||
%0:_(s32) = G_CONSTANT i32 1
|
||||
|
||||
; FIXME: Should not be a constant
|
||||
%1:_(s32) = G_CONSTANT i32 0
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), %1, %0
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.s.sendmsg), 0, %0
|
||||
|
||||
...
|
||||
|
|
Loading…
Reference in New Issue