From a93bc6c25340329e49407f5fc231ca870f5c61e3 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Wed, 15 Feb 2017 22:17:09 +0000 Subject: [PATCH] AMDGPU: Consolidate sendmsg/sendmsghalt handling and tests git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295244 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/AMDGPU/SIISelLowering.cpp | 11 +- test/CodeGen/AMDGPU/amdgcn.sendmsg-m0.ll | 41 ----- test/CodeGen/AMDGPU/amdgcn.sendmsg.ll | 161 ------------------ test/CodeGen/AMDGPU/llvm.amdgcn.sendmsg.ll | 189 +++++++++++++++++++++ 4 files changed, 193 insertions(+), 209 deletions(-) delete mode 100644 test/CodeGen/AMDGPU/amdgcn.sendmsg-m0.ll delete mode 100644 test/CodeGen/AMDGPU/amdgcn.sendmsg.ll create mode 100644 test/CodeGen/AMDGPU/llvm.amdgcn.sendmsg.ll diff --git a/lib/Target/AMDGPU/SIISelLowering.cpp b/lib/Target/AMDGPU/SIISelLowering.cpp index 5c8aee79fdb..491880794f5 100644 --- a/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/lib/Target/AMDGPU/SIISelLowering.cpp @@ -2936,16 +2936,13 @@ SDValue SITargetLowering::LowerINTRINSIC_VOID(SDValue Op, return DAG.getNode(Opc, DL, Op->getVTList(), Ops); } case Intrinsic::amdgcn_s_sendmsg: + case Intrinsic::amdgcn_s_sendmsghalt: case AMDGPUIntrinsic::SI_sendmsg: { + unsigned NodeOp = (IntrinsicID == Intrinsic::amdgcn_s_sendmsghalt) ? + AMDGPUISD::SENDMSGHALT : AMDGPUISD::SENDMSG; Chain = copyToM0(DAG, Chain, DL, Op.getOperand(3)); SDValue Glue = Chain.getValue(1); - return DAG.getNode(AMDGPUISD::SENDMSG, DL, MVT::Other, Chain, - Op.getOperand(2), Glue); - } - case Intrinsic::amdgcn_s_sendmsghalt: { - Chain = copyToM0(DAG, Chain, DL, Op.getOperand(3)); - SDValue Glue = Chain.getValue(1); - return DAG.getNode(AMDGPUISD::SENDMSGHALT, DL, MVT::Other, Chain, + return DAG.getNode(NodeOp, DL, MVT::Other, Chain, Op.getOperand(2), Glue); } case AMDGPUIntrinsic::SI_tbuffer_store: { diff --git a/test/CodeGen/AMDGPU/amdgcn.sendmsg-m0.ll b/test/CodeGen/AMDGPU/amdgcn.sendmsg-m0.ll deleted file mode 100644 index 8d8885852af..00000000000 --- a/test/CodeGen/AMDGPU/amdgcn.sendmsg-m0.ll +++ /dev/null @@ -1,41 +0,0 @@ -; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=GCN %s -; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=VI -check-prefix=GCN %s - -; GCN-LABEL: {{^}}main: -; GCN: s_mov_b32 m0, s0 -; VI-NEXT: s_nop 0 -; GCN-NEXT: sendmsg(MSG_GS_DONE, GS_OP_NOP) -; GCN-NEXT: s_endpgm - -define amdgpu_gs void @main(i32 inreg %a) #0 { - call void @llvm.amdgcn.s.sendmsg(i32 3, i32 %a) - ret void -} - -; GCN-LABEL: {{^}}main_halt: -; GCN: s_mov_b32 m0, s0 -; VI-NEXT: s_nop 0 -; GCN-NEXT: s_sendmsghalt sendmsg(MSG_INTERRUPT) -; GCN-NEXT: s_endpgm - -define void @main_halt(i32 inreg %a) #0 { - call void @llvm.amdgcn.s.sendmsghalt(i32 1, i32 %a) - ret void -} - -; GCN-LABEL: {{^}}legacy: -; GCN: s_mov_b32 m0, s0 -; VI-NEXT: s_nop 0 -; GCN-NEXT: sendmsg(MSG_GS_DONE, GS_OP_NOP) -; GCN-NEXT: s_endpgm - -define amdgpu_gs void @legacy(i32 inreg %a) #0 { - call void @llvm.SI.sendmsg(i32 3, i32 %a) - ret void -} - -declare void @llvm.amdgcn.s.sendmsg(i32, i32) #0 -declare void @llvm.amdgcn.s.sendmsghalt(i32, i32) #0 -declare void @llvm.SI.sendmsg(i32, i32) #0 - -attributes #0 = { nounwind } diff --git a/test/CodeGen/AMDGPU/amdgcn.sendmsg.ll b/test/CodeGen/AMDGPU/amdgcn.sendmsg.ll deleted file mode 100644 index 31f9cfca6de..00000000000 --- a/test/CodeGen/AMDGPU/amdgcn.sendmsg.ll +++ /dev/null @@ -1,161 +0,0 @@ -;RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck %s -;RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck %s - -; CHECK-LABEL: {{^}}test_interrupt: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_INTERRUPT) -define void @test_interrupt() { -body: - call void @llvm.amdgcn.s.sendmsg(i32 1, i32 0); - ret void -} - -; CHECK-LABEL: {{^}}test_gs_emit: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT, 0) -define void @test_gs_emit() { -body: - call void @llvm.amdgcn.s.sendmsg(i32 34, i32 0); - ret void -} - -; CHECK-LABEL: {{^}}test_gs_cut: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 1) -define void @test_gs_cut() { -body: - call void @llvm.amdgcn.s.sendmsg(i32 274, i32 0); - ret void -} - -; CHECK-LABEL: {{^}}test_gs_emit_cut: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) -define void @test_gs_emit_cut() { -body: - call void @llvm.amdgcn.s.sendmsg(i32 562, i32 0) - ret void -} - -; CHECK-LABEL: {{^}}test_gs_done: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP) -define void @test_gs_done() { -body: - call void @llvm.amdgcn.s.sendmsg(i32 3, i32 0) - ret void -} - - -; CHECK-LABEL: {{^}}test_interrupt_halt: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsghalt sendmsg(MSG_INTERRUPT) -define void @test_interrupt_halt() { -body: - call void @llvm.amdgcn.s.sendmsghalt(i32 1, i32 0) - ret void -} - -; CHECK-LABEL: {{^}}test_gs_emit_halt: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsghalt sendmsg(MSG_GS, GS_OP_EMIT, 0) -define void @test_gs_emit_halt() { -body: - call void @llvm.amdgcn.s.sendmsghalt(i32 34, i32 0) - ret void -} - -; CHECK-LABEL: {{^}}test_gs_cut_halt: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsghalt sendmsg(MSG_GS, GS_OP_CUT, 1) -define void @test_gs_cut_halt() { -body: - call void @llvm.amdgcn.s.sendmsghalt(i32 274, i32 0) - ret void -} - -; CHECK-LABEL: {{^}}test_gs_emit_cut_halt: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsghalt sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) -define void @test_gs_emit_cut_halt() { -body: - call void @llvm.amdgcn.s.sendmsghalt(i32 562, i32 0) - ret void -} - -; CHECK-LABEL: {{^}}test_gs_done_halt: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsghalt sendmsg(MSG_GS_DONE, GS_OP_NOP) -define void @test_gs_done_halt() { -body: - call void @llvm.amdgcn.s.sendmsghalt(i32 3, i32 0) - ret void -} - -; Legacy -; CHECK-LABEL: {{^}}test_legacy_interrupt: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_INTERRUPT) -define void @test_legacy_interrupt() { -body: - call void @llvm.SI.sendmsg(i32 1, i32 0) - ret void -} - -; CHECK-LABEL: {{^}}test_legacy_gs_emit: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT, 0) -define void @test_legacy_gs_emit() { -body: - call void @llvm.SI.sendmsg(i32 34, i32 0) - ret void -} - -; CHECK-LABEL: {{^}}test_legacy_gs_cut: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 1) -define void @test_legacy_gs_cut() { -body: - call void @llvm.SI.sendmsg(i32 274, i32 0) - ret void -} - -; CHECK-LABEL: {{^}}test_legacy_gs_emit_cut: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) -define void @test_legacy_gs_emit_cut() { -body: - call void @llvm.SI.sendmsg(i32 562, i32 0) - ret void -} - -; CHECK-LABEL: {{^}}test_legacy_gs_done: -; CHECK: s_mov_b32 m0, 0 -; CHECK-NOT: s_mov_b32 m0 -; CHECK: s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP) -define void @test_legacy_gs_done() { -body: - call void @llvm.SI.sendmsg(i32 3, i32 0) - ret void -} - -; Function Attrs: nounwind -declare void @llvm.amdgcn.s.sendmsg(i32, i32) #0 -declare void @llvm.amdgcn.s.sendmsghalt(i32, i32) #0 -declare void @llvm.SI.sendmsg(i32, i32) #0 - -attributes #0 = { nounwind } diff --git a/test/CodeGen/AMDGPU/llvm.amdgcn.sendmsg.ll b/test/CodeGen/AMDGPU/llvm.amdgcn.sendmsg.ll new file mode 100644 index 00000000000..76df2ce5cfa --- /dev/null +++ b/test/CodeGen/AMDGPU/llvm.amdgcn.sendmsg.ll @@ -0,0 +1,189 @@ +;RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI %s +;RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s + +; GCN-LABEL: {{^}}test_interrupt: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_INTERRUPT) +define void @test_interrupt() { +body: + call void @llvm.amdgcn.s.sendmsg(i32 1, i32 0); + ret void +} + +; GCN-LABEL: {{^}}test_gs_emit: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT, 0) +define void @test_gs_emit() { +body: + call void @llvm.amdgcn.s.sendmsg(i32 34, i32 0); + ret void +} + +; GCN-LABEL: {{^}}test_gs_cut: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 1) +define void @test_gs_cut() { +body: + call void @llvm.amdgcn.s.sendmsg(i32 274, i32 0); + ret void +} + +; GCN-LABEL: {{^}}test_gs_emit_cut: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) +define void @test_gs_emit_cut() { +body: + call void @llvm.amdgcn.s.sendmsg(i32 562, i32 0) + ret void +} + +; GCN-LABEL: {{^}}test_gs_done: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP) +define void @test_gs_done() { +body: + call void @llvm.amdgcn.s.sendmsg(i32 3, i32 0) + ret void +} + +; GCN-LABEL: {{^}}sendmsg: +; GCN: s_mov_b32 m0, s0 +; VI-NEXT: s_nop 0 +; GCN-NEXT: sendmsg(MSG_GS_DONE, GS_OP_NOP) +; GCN-NEXT: s_endpgm +define amdgpu_gs void @sendmsg(i32 inreg %a) #0 { + call void @llvm.amdgcn.s.sendmsg(i32 3, i32 %a) + ret void +} + +; GCN-LABEL: {{^}}sendmsghalt: +; GCN: s_mov_b32 m0, s0 +; VI-NEXT: s_nop 0 +; GCN-NEXT: s_sendmsghalt sendmsg(MSG_INTERRUPT) +; GCN-NEXT: s_endpgm +define void @sendmsghalt(i32 inreg %a) #0 { + call void @llvm.amdgcn.s.sendmsghalt(i32 1, i32 %a) + ret void +} + +; GCN-LABEL: {{^}}test_interrupt_halt: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsghalt sendmsg(MSG_INTERRUPT) +define void @test_interrupt_halt() { +body: + call void @llvm.amdgcn.s.sendmsghalt(i32 1, i32 0) + ret void +} + +; GCN-LABEL: {{^}}test_gs_emit_halt: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsghalt sendmsg(MSG_GS, GS_OP_EMIT, 0) +define void @test_gs_emit_halt() { +body: + call void @llvm.amdgcn.s.sendmsghalt(i32 34, i32 0) + ret void +} + +; GCN-LABEL: {{^}}test_gs_cut_halt: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsghalt sendmsg(MSG_GS, GS_OP_CUT, 1) +define void @test_gs_cut_halt() { +body: + call void @llvm.amdgcn.s.sendmsghalt(i32 274, i32 0) + ret void +} + +; GCN-LABEL: {{^}}test_gs_emit_cut_halt: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsghalt sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) +define void @test_gs_emit_cut_halt() { +body: + call void @llvm.amdgcn.s.sendmsghalt(i32 562, i32 0) + ret void +} + +; GCN-LABEL: {{^}}test_gs_done_halt: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsghalt sendmsg(MSG_GS_DONE, GS_OP_NOP) +define void @test_gs_done_halt() { +body: + call void @llvm.amdgcn.s.sendmsghalt(i32 3, i32 0) + ret void +} + +; Legacy +; GCN-LABEL: {{^}}test_legacy_interrupt: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_INTERRUPT) +define void @test_legacy_interrupt() { +body: + call void @llvm.SI.sendmsg(i32 1, i32 0) + ret void +} + +; GCN-LABEL: {{^}}test_legacy_gs_emit: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT, 0) +define void @test_legacy_gs_emit() { +body: + call void @llvm.SI.sendmsg(i32 34, i32 0) + ret void +} + +; GCN-LABEL: {{^}}test_legacy_gs_cut: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 1) +define void @test_legacy_gs_cut() { +body: + call void @llvm.SI.sendmsg(i32 274, i32 0) + ret void +} + +; GCN-LABEL: {{^}}test_legacy_gs_emit_cut: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) +define void @test_legacy_gs_emit_cut() { +body: + call void @llvm.SI.sendmsg(i32 562, i32 0) + ret void +} + +; GCN-LABEL: {{^}}test_legacy_gs_done: +; GCN: s_mov_b32 m0, 0 +; GCN-NOT: s_mov_b32 m0 +; GCN: s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP) +define void @test_legacy_gs_done() { +body: + call void @llvm.SI.sendmsg(i32 3, i32 0) + ret void +} + +; GCN-LABEL: {{^}}sendmsg_legacy: +; GCN: s_mov_b32 m0, s0 +; VI-NEXT: s_nop 0 +; GCN-NEXT: sendmsg(MSG_GS_DONE, GS_OP_NOP) +; GCN-NEXT: s_endpgm +define amdgpu_gs void @sendmsg_legacy(i32 inreg %a) #0 { + call void @llvm.SI.sendmsg(i32 3, i32 %a) + ret void +} + +declare void @llvm.amdgcn.s.sendmsg(i32, i32) #0 +declare void @llvm.amdgcn.s.sendmsghalt(i32, i32) #0 +declare void @llvm.SI.sendmsg(i32, i32) #0 + +attributes #0 = { nounwind } -- 2.50.1